CommunicationObjectAbortedException возникает, когда клиент WCF ожидает асинхронного возврата из собственной службы - PullRequest
0 голосов
/ 08 апреля 2011

У меня есть клиент 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 голос
/ 11 апреля 2011

Я полагаю, что причина, по которой я столкнулся с этими проблемами, заключается в том, что из-за простоя службы произошел тайм-аут, так как я заметил, что время ожидания истекло при значении по умолчанию 10 минут.В app.config службы я создаю схему привязки Dual HTTP по умолчанию, которая устанавливает тайм-аут на бесконечность.

В чем я не уверен, так это почему я получаю сообщение CommunicationObjectAbortedException, а не Timeout Exception, которое другоеисточники, которые я нашел, указывают, что вы получите.Возможно, он отличается в зависимости от режима привязки?

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...