Otrzymałem również ten sam błąd, WCF działało poprawnie, gdy używałem go w środowisku deweloperskim z moimi poświadczeniami, ale gdy ktoś inny używał go w TEST, generował ten sam błąd. Zrobiłem wiele badań, a następnie zamiast wykonywać aktualizacje konfiguracji, obsłużyłem wyjątek w metodzie WCF za pomocą wyjątku błędu. Ponadto tożsamość programu WCF musi być ustawiona przy użyciu tych samych poświadczeń, które mają dostęp do bazy danych, ktoś mógł zmienić Twoje uprawnienia. Poniżej kod na to samo:
[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; }
}
w swoim service1.svc.cs możesz użyć tego w bloku catch:
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());
}
I użyj tego w aplikacji klienckiej, jak poniższy kod:
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();
}
Po prostu spróbuj tego, na pewno pomoże to uzyskać dokładny problem.