#c# #wcf
#c# #wcf
Вопрос:
У меня есть клиент WCF, который создает автономную службу. Клиент в конечном итоге разместит другие конечные точки службы, поэтому клиент поддерживает список ссылок на службы локально, m_services, и вызывает методы службы на каждой поддерживаемой конечной точке. Создается ServiceHost, а клиент создается в конечной точке. В службу успешно выполняется несколько вызовов настройки.
Выполняется другой вызов службы, который быстро возвращается, но затем клиент ожидает асинхронного возврата к делегату обратного вызова. Выполняется множество обратных вызовов, примерно 1 раз в секунду в течение примерно 5-минутного периода, в ожидании определенного метода обратного вызова с переданными данными.
Пока клиент ожидает ответа, я в конечном итоге получаю следующие исключения в свою консоль вывода.
A first chance exception of type 'System.ServiceModel.CommunicationObjectAbortedException' occurred in System.ServiceModel.dll
A first chance exception of type 'System.ServiceModel.CommunicationObjectAbortedException' occurred in System.ServiceModel.dll
A first chance exception of type 'System.ServiceModel.CommunicationObjectAbortedException' occurred in System.Runtime.DurableInstancing.dll
A first chance exception of type 'System.ServiceModel.CommunicationObjectAbortedException' occurred in System.Runtime.DurableInstancing.dll
A first chance exception of type 'System.ServiceModel.CommunicationException' occurred in System.Runtime.DurableInstancing.dll
Ниже приведен код, который я использую для создания ServiceHost для автономного сервиса. Я что-то неправильно делаю с настройкой моего ServiceHost и клиента? Я не уверен, почему изначально клиент реагирует на вызовы и выдает ожидаемые результаты, но в конечном итоге происходит сбой, и объект связи прерывается. Изначально у меня был ServiceHost в качестве локальной переменной для метода, который его создавал, но я перенес его в поле класса, думая, что это, возможно, собранный мусор.
m_selfHost = new ServiceHost(hostType);
var binding = new WSDualHttpBinding();
ContractDescription contractDescription =
ContractDescription.GetContract(contractType);
EndpointAddress endpointAddress = new EndpointAddress(Properties.Settings.Default.SelfHostedServiceUrl);
ServiceEndpoint endpoint = new ServiceEndpoint(contractDescription, binding, endpointAddress);
m_selfHost.AddServiceEndpoint(endpoint);
DllAnalyzerServiceClient service = new DllAnalyzerServiceClient(m_instanceContext, binding, endpointAddress);
m_selfHost.Open();
service.Subscribe();
service.DynamicallyLoadDll(crxDllFile);
m_services.Add(service);
Комментарии:
1. Может ли быть так, что канал обратного вызова генерирует это сообщение об ошибке исключения?
Ответ №1:
Я полагаю, что причина, по которой я испытывал эти проблемы, заключается в том, что время ожидания службы истекло из-за бездействия, поскольку я заметил, что время ожидания истекло по умолчанию, равному 10 минутам. В app.config сервиса я создаю схему двойной привязки HTTP по умолчанию, которая устанавливает время ожидания бесконечным.
В чем я не уверен, так это в том, почему я получал исключение CommunicationObjectAbortedException, а не исключение тайм-аута, которое, как указывают другие источники, которые я нашел, вы получите. Возможно, это отличается в зависимости от режима привязки?
<system.serviceModel>
<bindings>
<wsDualHttpBinding>
<binding name="DefaultDualHttpBinding" receiveTimeout="Infinite">
<reliableSession inactivityTimeout="Infinite" />
</binding>
</wsDualHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="DllAnalyzerService.Service1Behavior"
name="DllAnalyzerService.DllAnalyzerService">
<endpoint address="" binding="wsDualHttpBinding" bindingConfiguration="DefaultDualHttpBinding"
contract="DllAnalyzerService.IDllAnalyzerService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8732/Design_Time_Addresses/DllAnalyzerService/DllAnalyzerService/" />
</baseAddresses>
</host>
</service>
</services>