WCF + net.tcp Проблема тайм-аута связи - PullRequest
0 голосов
/ 07 апреля 2011

У меня есть критическая проблема в моем проекте.Во время транзакции с (wcf + netTCP) я получал исключение:

The communication object, 
System.ServiceModel.Channels.ClientFramingDuplexSessionChannel, 
cannot be used for communication because it is in the Faulted state.

В сервисе WCF app.config добавьте тег привязки со спецификацией тайм-аута.Но моя транзакция была завершена в течение 10 минут.в чем была проблема ..

 <bindings>
      <basicHttpBinding>
        <binding name="ServiceSoap" closeTimeout="0:01:00" openTimeout="0:01:00" receiveTimeout="10:00:00" sendTimeout="10:00:00" allowCookies="false"
          bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
          maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
          messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
          useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
      <netTcpBinding>
        <binding name="b1" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="infinite" sendTimeout="10:00:00"

transferMode="Buffered"

maxBufferPoolSize="524288"

maxBufferSize="65536"

maxConnections="10"

maxReceivedMessageSize="65536">
          <security mode="None" />
        </binding>
      </netTcpBinding>
    </bindings>

Кто-нибудь, помогите мне !!! ..

Ответы [ 3 ]

4 голосов
/ 07 апреля 2011

Я не уверен, почему вы думаете, что это проблема тайм-аута? Сообщение об ошибке не означает, что истекло время ожидания. Может ли сервер выдавать исключение?

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

2 голосов
/ 07 апреля 2011

Попробуйте добавить это в свой netTcpBinding:

<reliableSession inactivityTimeout="infinite" enabled="true" />

И если это не сработает, включите трассировку WCF, чтобы выяснить, что ее убивает.

1 голос
/ 07 апреля 2011

Это не полный ответ, но если вы используете клиент + сервер на той же машине, вы можете использовать привязку именованного канала вместо netTcp

Раздел привязки конфигурации может выглядеть следующим образом.

<netNamedPipeBinding>
  <binding name="infiniteOpenBindingConfig" receiveTimeout="infinite" closeTimeout="infinite">
  </binding>
</netNamedPipeBinding>

Чтобы привязка оставалась активной в течение неопределенного времени, указанная выше конфигурация должна быть установлена ​​как на сервере, так и на клиенте.

...