Дуплекс WCF CustomBinding не может открыть клиентский порт - PullRequest
2 голосов
/ 30 июля 2010

Я борюсь с этим дуплексным сервисом WCF, который делает вызовы в сервис для получения больших объемов данных.Я использую wsDualHttpBinding, который работает, но очень медленно.Я профилировал и большую часть времени использовал Serializer и процесс аутентификации.Поэтому я решил использовать двоичное кодирование и изменить Security to Transport, и, поскольку это приложение для внутренней сети, шифрование не является необходимым.

<wsDualHttpBinding>
        <binding name="CRMXServiceDualBinding" sendTimeout="00:10:00"
          maxBufferPoolSize="50524288" maxReceivedMessageSize="50000000"
          messageEncoding="Mtom">
          <readerQuotas maxDepth="50000000" maxStringContentLength="50000000"
            maxArrayLength="50000000" maxBytesPerRead="50000000" maxNameTableCharCount="50000000" />
          <reliableSession ordered="true" inactivityTimeout="00:30:00" />
          <security mode="Message">
            <message clientCredentialType="Windows" negotiateServiceCredential="true" />
          </security>
        </binding>
      </wsDualHttpBinding>

Поэтому я попытался создать это пользовательское связывание.

<customBinding>
        <binding name="DuplexBindingConfig">
          <compositeDuplex />
          <oneWay maxAcceptedChannels="128" packetRoutable="false">
            <channelPoolSettings idleTimeout="00:10:00" leaseTimeout="00:10:00"
              maxOutboundChannelsPerEndpoint="10" />
          </oneWay>
          <binaryMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16">
            <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
              maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          </binaryMessageEncoding>
          <httpTransport manualAddressing="false" maxBufferPoolSize="2147483647"
            maxReceivedMessageSize="2147483647" allowCookies="false" authenticationScheme="Negotiate"
            bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
            keepAliveEnabled="true" maxBufferSize="2147483647" proxyAuthenticationScheme="Anonymous"
            realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
            useDefaultWebProxy="true" />
        </binding>
      </customBinding>

Теперь я сталкиваюсь с двумя проблемами: 1. Для тестирования на сервере разработки ASP.Net сразу же возвращается ошибка: «HTTP-запрос не авторизован с помощью схемы аутентификации клиента« Согласование ». Получен заголовок аутентификациис сервера был 'NTLM'. "2. Тестируя на IIS6, вызов никогда не достигает сервера.Я догадываюсь, что порт клиента не открывается.

Пожалуйста, помогите .. Заранее спасибо.

* Кстати, я использую Windows XP SP3, Framework 3.5 SP1, VS2008

1 Ответ

4 голосов
/ 30 июля 2010

Я вижу одну проблему:

Нельзя использовать безопасность транспортного уровня для дуплексной привязки http, даже для настраиваемой двусторонней привязки http.

Клиент будет прослушивать через стандартный прослушиватель порта (то есть тот, который не является веб-службой) и не будет понимать детали, необходимые для работы SSL.

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