Ошибка связи WCF - PullRequest
       40

Ошибка связи WCF

0 голосов
/ 07 июня 2018

Мы встречаемся с ошибкой связи WCF уже несколько дней, и я не могу понять, что является причиной ошибки.Сначала я думал, что это проблема с сертификатом SSL, но это не так.Я также позаботился о том, чтобы конечная точка была доступна, просто введя URL-адрес в веб-браузере и она доступна для просмотра.Я также убедился, что размер запроса по умолчанию не вызывает проблемы.Я уверен, что запросы меньше, чем значение по умолчанию 30 МБ.

Что еще может предотвратить эту ошибку трассировки стека?

Трассировка стека клиента:

Не удалось получить WCFDirector из-за сбоя связи.

Поскольку форма загружена неправильно, ее необходимо закрыть.---> OSI.Framework.FrameworkException: загрузка WCFDirector не выполнена из-за сбоя связи.---> System.ServiceModel.CommunicationException: лежащее в основе соединение было закрыто: соединение, которое, как предполагалось, было поддержано, было закрыто сервером.---> System.Net.WebException: лежащее в основе соединение было закрыто: соединение, которое, как предполагалось, было поддержано, было закрыто сервером.---> System.IO.IOException: невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто удаленным хостом.---> System.Net.Sockets.SocketException: существующее соединение было принудительно закрыто удаленным узлом в System.Net.Sockets.Socket.Receive (буфер Byte [], смещение Int32, размер Int32, SocketFlags socketFlags) в System.Net.Sockets.NetworkStream.Read (буфер Byte [], смещение Int32, размер Int32) --- конец трассировки стека внутренних исключений --- в System.Net.Sockets.NetworkStream.Read (буфер Byte [], смещение Int32,Размер Int32) в System.Net.FixedSizeReader.ReadPacket (буфер Byte [], смещение Int32, счетчик Int32) в System.Net.Security._SslStream.StartFrameHeader (буфер Byte [], смещение Int32, количество Int32, asyncProtocolRequest asyncRequest) в системе.Net.Security..Net.TlsStream.Read (буфер Byte [], смещение Int32, размер Int32) в System.Net.PooledStream.Read (буфер Byte [], смещение Int32)., Размер Int32) в System.Net.Connection.SyncRead (запрос HttpWebRequest, логический userRetrievedStream, логический probeRead) --- конец трассировки стека внутренних исключений --- в System.Net.HttpWebRequest.GetResponse () в System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply (TimeSpan timeout) --- Конец внутренней трассировки стека исключений ---

Трассировка стека сервера:

в системе.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException (WebException WebException, HttpWebRequest запрос, HttpAbortReason abortReason) в System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply (TimeSpan таймаута) в System.ServiceModel.Channels.RequestChannel.Request (Messageсообщение, время ожидания TimeSpan) в System.ServiceModel.Dispatcher.RequestChannelBinder.Request (сообщение сообщения, время ожидания TimeSpan) в System.ServiceModel.Channels.ServiceChannel.Call (строковое действие, логическое одностороннее, ProxyOperationОперация во время выполнения, Object [] ins, Object [] ауты, TimeSpan timeout) в System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage methodCall, ProxyOperationRuntime) в System.ServiceModel.Channels.ServiceChannelProessIn.Gessage_6 сообщений)

1 Ответ

0 голосов
/ 09 июня 2018

Попробуйте отключить KeepAlive.Что-то вроде:

var client = new MyWcfClient();
var customBinding = new CustomBinding(client.Endpoint.Binding);
var transportElement = customBinding.Elements.Find<HttpTransportBindingElement>();

transportElement.KeepAliveEnabled = false;

client.Endpoint.Binding = customBinding;

Конфигурируемая версия только для Rest API и SOAP

<services>
  <service name="SecureTransportDemo.Service.GreetingService">
    <endpoint address="Soap"
              binding="customBinding" 
              bindingConfiguration="soap-secure-nokeepalive"
              contract="SecureTransportDemo.Service.IGreetingService"
              name="soap-nokeepalive"/>
    <endpoint address="Rest"
              binding="customBinding"
              bindingConfiguration="rest-secure-nokeepalive"
              behaviorConfiguration="web"
              contract="SecureTransportDemo.Service.IGreetingService"
              name="rest-nokeepalive"/>
  </service>
</services>
<bindings>
  <customBinding>
    <binding name="soap-secure-nokeepalive">
      <textMessageEncoding />
      <httpsTransport allowCookies="false" 
                      keepAliveEnabled="false"/>
    </binding>
    <binding name="rest-secure-nokeepalive">
      <webMessageEncoding />
      <httpsTransport manualAddressing="true" 
                      allowCookies="false" 
                      keepAliveEnabled="false"/>
    </binding>
  </customBinding>
</bindings>
<behaviors>
  <endpointBehaviors>
    <behavior name="web">
      <webHttp automaticFormatSelectionEnabled="true"
               faultExceptionEnabled="true"
               helpEnabled="true"/>
    </behavior>
  </endpointBehaviors>
</behaviors>

...