Ошибка именованного канала WCF: не может использоваться для связи, так как она была прервана

#c# #wcf

Вопрос:

У меня есть узел именованного канала WCF в службе Windows с конфигурацией XML:

 <system.serviceModel>
    <bindings>
      <netNamedPipeBinding>
        <binding name="NamedPipeBinding_INamedPipeBindigService" closeTimeout="00:05:00" openTimeout="00:20:00" receiveTimeout="00:20:00" sendTimeout="00:20:00" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" maxConnections="10" maxBufferPoolSize="50000000" maxBufferSize="50000000" maxReceivedMessageSize="50000000">
          <readerQuotas maxDepth="32" maxStringContentLength="50000000" maxArrayLength="50000000" maxBytesPerRead="50000000" maxNameTableCharCount="50000000" />
          <security mode="Transport" />
        </binding>
      </netNamedPipeBinding>
    </bindings>
    <services>
      <service name="Name.WCFNamedPipe.Server.NamedPipeServiceImpl" behaviorConfiguration="MEX">
        <endpoint address="net.pipe://localhost/WcfNamedPipe/Name" binding="netNamedPipeBinding" bindingConfiguration="NamedPipeBinding_INamedPipeBindigService" contract="Name.WCFNamedPipe.Interface.INamedPipeService" />

        <endpoint address="net.pipe://localhost/WcfNamedPipe/Name/mex" binding="mexNamedPipeBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MEX">
          <serviceMetadata httpGetEnabled="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
<system.net>  
    <defaultProxy>  
     <proxy autoDetect="false" bypassonlocal="false" usesystemdefault="false" />
    </defaultProxy>  
</system.net>
 

И у меня есть клиент именованного канала WCF в приложении Windows form с конфигурацией XML:

  <system.serviceModel>
    <bindings>
      <netNamedPipeBinding>
        <binding name="NamedPipeBinding_INamedPipeBindigService" closeTimeout="00:10:00" openTimeout="00:20:00" receiveTimeout="00:20:00" sendTimeout="00:20:00" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" maxConnections="10" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">

          <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <security mode="Transport" />
        </binding>
      </netNamedPipeBinding>
    </bindings>

    <client>
      <endpoint address="net.pipe://localhost/WcfNamedPipe/Name" binding="netNamedPipeBinding" bindingConfiguration="NamedPipeBinding_INamedPipeBindigService" contract="Name.WCFNamedPipe.Interface.INamedPipeService" name="NamedPipeBindingServiceEndPoint" />
    </client>
  </system.serviceModel>
 

Исключение:

 Exception occurred While Performing Authentication. The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it has been Aborted. 
Server stack trace: 
at System.ServiceModel.Channels.CommunicationObject.ThrowIfDisposedOrNotOpen()
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]: 

at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageDataamp; msgData, Int32 type)
at Name.WCFNamedPipe.Interface.INamedPipeBindingCallbackService.Message(CommunicatUnit composite)
at Name.WCFNamedPipe.Server.NamedPipeServiceImpl.CallClients(CommunicatUnit message, String clientName) in C:Neethu filesbitbucketFM-14020Name.IPCFrameworkServerNamedPipeServiceImpl.cs:line 58
at Name.ProcessData.AuthenticationManager.PerformAuthentication(Object sender, PerformAuthenticationEventArgs e) in C:Neethu filesbitbucketFM-14020Name.ProcessDataAuthenticationManager.cs:line 205 
 

Что я заметил:

  1. Это исключение обычно возникает при запуске сервера, а иногда и между ними.
  2. Когда возникает это исключение, клиент обычно выдает исключение «Неисправное состояние«.
  3. Из 10 раз я заметил, что 2 или 3 раза возникает это исключение.

Что я подозреваю:

  1. Несоответствие конфигурации XML между клиентом и сервером.
  2. Возможно, причиной этого является VPN.

Но все равно мы не знаем, что именно может вызвать эту проблему.

Комментарии:

1. Вы пробовали сохранить binding конфигурацию такой же, особенно поле closeTimeout в приложениях win service и form?