6 ответов:
определение поведение в своем
.configfile:<configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="debug"> <serviceDebug includeExceptionDetailInFaults="true" /> </behavior> </serviceBehaviors> </behaviors> ... </system.serviceModel> </configuration>затем примените поведение к своему сервису по следующим линиям:
<configuration> <system.serviceModel> ... <services> <service name="MyServiceName" behaviorConfiguration="debug" /> </services> </system.serviceModel> </configuration>вы также можете установить его программно. Смотрите этот вопрос.
это в приложение.конфигурационный файл.
<configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior> <serviceDebug includeExceptionDetailInFaults="true"/>
Если вы хотите сделать это с помощью кода, Вы можете добавить поведения такой:
serviceHost.Description.Behaviors.Remove( typeof(ServiceDebugBehavior)); serviceHost.Description.Behaviors.Add( new ServiceDebugBehavior { IncludeExceptionDetailInFaults = true });
вы также можете установить его в теге [ServiceBehavior] над объявлением класса, который наследует интерфейс
[ServiceBehavior(IncludeExceptionDetailInFaults = true)] public class MyClass:IMyService { ... }Immortal Blue правильно не раскрывает детали exeption для публично выпущенной версии, но для целей тестирования это удобный инструмент. Всегда выключайте при отпускании.
Я также получал ту же ошибку, WCF работал правильно для меня, когда я использовал его в среде разработки с моими учетными данными, но когда кто-то другой использовал его в тесте, он бросал ту же ошибку. Я провел много исследований, а затем вместо того, чтобы делать обновления конфигурации, обработал исключение в методе 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.ВПВ.CS вы можете использовать это в блоке 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()); }и использовать это в клиентском приложении, как показано ниже код:
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(); }просто попробуйте это, это поможет наверняка получить точную проблему.
как информация об ошибке сказал первый, пожалуйста, попробуйте увеличить значение тайм-аута как на стороне клиента, так и на стороне службы следующим образом:
<basicHttpBinding> <binding name="basicHttpBinding_ACRMS" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" openTimeout="00:20:00" receiveTimeout="00:20:00" closeTimeout="00:20:00" sendTimeout="00:20:00"> <readerQuotas maxDepth="32" maxStringContentLength="2097152" maxArrayLength="2097152" maxBytesPerRead="4006" maxNameTableCharCount="16384" /> </binding>- пожалуйста, не забудьте применить эту конфигурацию привязки к конечной точке следующим образом:
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHttpBinding_ACRMS" contract="MonitorRAM.IService1" />Если выше не может помочь, будет лучше, если вы можете попробовать загрузить свой основной проект здесь, то я хочу иметь тест в моем сторона.
Comments