ฉันยังได้รับข้อผิดพลาดเดียวกัน WCF ทำงานอย่างถูกต้องสำหรับฉันเมื่อฉันใช้ใน Dev Environment ด้วยข้อมูลประจำตัวของฉัน แต่เมื่อมีคนอื่นใช้ใน TEST มันก็โยนข้อผิดพลาดเดียวกัน ฉันทำการวิจัยจำนวนมากและจากนั้นแทนที่จะทำการอัปเดตการตั้งค่าจัดการข้อยกเว้นในวิธีการ WCF ด้วยความช่วยเหลือของการยกเว้นข้อผิดพลาด นอกจากนี้ข้อมูลประจำตัวสำหรับ WCF จะต้องตั้งค่าด้วยข้อมูลประจำตัวเดียวกันซึ่งมีการเข้าถึงในฐานข้อมูลบางคนอาจมีการเปลี่ยนแปลงสิทธิ์ของคุณ กรุณาค้นหารหัสด้านล่างสำหรับเดียวกัน:
[ServiceContract]
public interface IService1
{
[OperationContract]
[FaultContract(typeof(ServiceData))]
ForDataset GetCCDBdata();
[OperationContract]
[FaultContract(typeof(ServiceData))]
string GetCCDBdataasXMLstring();
//[OperationContract]
//string GetData(int value);
//[OperationContract]
//CompositeType GetDataUsingDataContract(CompositeType composite);
// TODO: Add your service operations here
}
[DataContract]
public class ServiceData
{
[DataMember]
public bool Result { get; set; }
[DataMember]
public string ErrorMessage { get; set; }
[DataMember]
public string ErrorDetails { get; set; }
}
ใน service1.svc.cs ของคุณคุณสามารถใช้สิ่งนี้ใน catch block:
catch (Exception ex)
{
myServiceData.Result = false;
myServiceData.ErrorMessage = "unforeseen error occured. Please try later.";
myServiceData.ErrorDetails = ex.ToString();
throw new FaultException<ServiceData>(myServiceData, ex.ToString());
}
และใช้สิ่งนี้ในแอปพลิเคชันไคลเอนต์เช่นรหัสด้านล่าง:
ConsoleApplicationWCFClient.CCDB_HIG_service.ForDataset ds = obj.GetCCDBdata();
string str = obj.GetCCDBdataasXMLstring();
}
catch (FaultException<ConsoleApplicationWCFClient.CCDB_HIG_service.ServiceData> Fex)
{
Console.WriteLine("ErrorMessage::" + Fex.Detail.ErrorMessage + Environment.NewLine);
Console.WriteLine("ErrorDetails::" + Environment.NewLine + Fex.Detail.ErrorDetails);
Console.ReadLine();
}
ลองใช้วิธีนี้มันจะช่วยให้ได้รับปัญหาที่แน่นอน