Пользовательская привязка WCF - тайм-аут отправки всегда достигнут - PullRequest
1 голос
/ 17 февраля 2009

У меня есть служба wcf, которая должна реализовывать обратные вызовы и размещаться на IIS 6.0. Поскольку IIS 6.0 не поддерживает привязку net.tcp, я решил использовать настраиваемую привязку, поскольку к службе обращаются разные клиенты в разных часовых поясах, и, используя настраиваемую привязку, я могу установить допустимое время наклона часов на значения, отличные от по умолчанию.

Вот мой файл конфигурации сервера:

<bindings>
  <customBinding>        
    <binding name="pscNetBinding" openTimeout="00:10:00">          
      <reliableSession acknowledgementInterval="00:00:00.2000000"
  flowControlEnabled="true" inactivityTimeout="23:59:59"
  maxPendingChannels="128" maxRetryCount="8" maxTransferWindowSize="128"
  ordered="true" />
      <compositeDuplex />
      <oneWay maxAcceptedChannels="128" packetRoutable="false">
        <channelPoolSettings idleTimeout="00:10:00"
  leaseTimeout="00:10:00" maxOutboundChannelsPerEndpoint="10" />
      </oneWay>
      <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
  messageVersion="Default" writeEncoding="utf-8">
        <readerQuotas maxDepth="2147483647"
  maxStringContentLength="2147483647" maxArrayLength="2147483647"
  maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
      </textMessageEncoding>
      <httpTransport manualAddressing="false"
  maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
  allowCookies="false" authenticationScheme="Anonymous"
  bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
  keepAliveEnabled="true" maxBufferSize="2147483647"
  proxyAuthenticationScheme="Anonymous" realm="" transferMode="Buffered"
  unsafeConnectionNtlmAuthentication="false" useDefaultWebProxy="true"/>
    </binding>
  </customBinding>
</bindings>

<services>
  <service name="SchneiderElectric.PSCNet.Server.Services.PSCNetWCFService" behaviorConfiguration="Behaviors1">
    <host>
      <baseAddresses>
        <add baseAddress ="http://10.155.18.18:2000/PSCNet"/>
      </baseAddresses>
    </host>
    <endpoint address="" binding="customBinding"    bindingConfiguration="pscNetBinding"
                                contract="SchneiderElectric.PSCNet.Server.Contracts.IPSCNetWCFService"/>
  </service>
</services>    
<behaviors>
  <serviceBehaviors>
    <behavior name="Behaviors1">
      <serviceMetadata httpGetEnabled = "true"/>
      <!--<serviceThrottling maxConcurrentCalls="2048" maxConcurrentSessions="2048" maxConcurrentInstances="2048" />
      <dataContractSerializer maxItemsInObjectGraph="2147483647" />-->
    </behavior>
  </serviceBehaviors>
</behaviors>

Файл конфигурации клиента:

  <bindings>
    <customBinding>
      <binding name="pscNetBinding" openTimeout="00:10:00">            
        <reliableSession acknowledgementInterval="00:00:00.2000000"
    flowControlEnabled="true" inactivityTimeout="23:59:59"
    maxPendingChannels="128" maxRetryCount="8" maxTransferWindowSize="128"
    ordered="true" />
        <compositeDuplex />
        <oneWay maxAcceptedChannels="128" packetRoutable="false">
          <channelPoolSettings idleTimeout="00:10:00"
    leaseTimeout="00:10:00" maxOutboundChannelsPerEndpoint="10" />
        </oneWay>
        <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
    messageVersion="Default" writeEncoding="utf-8" >
          <readerQuotas maxDepth="2147483647"
    maxStringContentLength="2147483647" maxArrayLength="2147483647"
    maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
        </textMessageEncoding >
        <httpTransport manualAddressing="false"
    maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
    allowCookies="false" authenticationScheme="Anonymous"
    bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
    keepAliveEnabled="true" maxBufferSize="2147483647"
    proxyAuthenticationScheme="Anonymous" realm="" transferMode="Buffered"
    unsafeConnectionNtlmAuthentication="false" useDefaultWebProxy="true" />                    
      </binding>
    </customBinding>
  </bindings>
  <client>
    <endpoint address="http://10.155.18.18:2000/PSCNet" binding="customBinding"
        bindingConfiguration="pscNetBinding" contract="PSCNetWCFService.IPSCNetWCFService"
        name="pscNetBinding" />
  </client>

Если я использую сервер и клиент на одной машине, все работает нормально. Если я запускаю их на разных машинах, я получаю следующую ошибку:

Не удалось подключиться к http://10.155.18.198:9000/e60ba5b3-f979-4922-b9f8-c820caaa04c2. TCP код ошибки 10060: попытка подключения не удалась, потому что подключен сторона не ответила должным образом по истечении определенного периода времени или установила соединение не удалось, потому что подключенный хост не смог ответить 10.155.18.198:9000.

Может ли кто-нибудь в сообществе помочь мне в этом отношении?

Ответы [ 2 ]

1 голос
/ 18 февраля 2009

Можете ли вы показать часть конфигурации, где вы определяете customBinding? Возможно, вы просто не вставили эту часть, но когда вы определяете пользовательскую привязку, вы должны указать как минимум кодировку и транспорт - что-то вроде этого:

<bindings>
    <customBinding>
        <binding name="MyCustomTextTcpBinding">
            <textMessageEncoding />
            <tcpTransport />
        </binding>
    </customBinding>
</bindings>

Можете ли вы также вставить часть, в которой вы определяете свою конфигурацию связывания "pscNetBinding"?

0 голосов
/ 27 апреля 2009

Служба Windows, несомненно, является хорошим решением, но я думаю, что лучше будет сам хостинг и вы можете иметь любой тип привязки на нем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...