Еще раз пытаюсь заставить мой сервис WCF работать в нашей среде с балансировкой нагрузки, и я полон надежд.Я перешел к использованию <customBinding>
, поскольку кажется, что рекомендация заключается в установке директивы keepAliveEnabled
.
Тем не менее, у меня возникла проблема с установкой аутентификации Windows на стороне сервера, поскольку <customBinding>
не работает аналогичным образом.
На стороне сервера выглядит так:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<bindings>
<customBinding>
<binding name="HttpBinding" closeTimeout="00:00:45">
<textMessageEncoding>
<readerQuotas maxStringContentLength="200000" maxArrayLength="200000" />
</textMessageEncoding>
<httpTransport keepAliveEnabled="false" maxReceivedMessageSize="200000" authenticationScheme="Negotiate"/>
</binding>
</customBinding>
</bindings>
<services>
<endpoint address="http://svcserv/Services/ReportService/Reports.svc" binding="customBinding"
bindingConfiguration="HttpBinding" contract="ReportService.IReports" >
</endpoint>
<endpoint address="mex" binding="customBinding" bindingConfiguration="HttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ReportService.ReportsBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
На стороне клиента выглядит так:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<bindings>
<basicHttpBinding>
<binding name="CustomBinding_IReports" maxReceivedMessageSize="200000">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint name="CustomBinding_IReports" address="http://omsnetdev/Services/ReportService/Reports.svc"
binding="basicHttpBinding" bindingConfiguration="CustomBinding_IReports" contract="ReportService.IReports">
<identity>
<servicePrincipalName value="host/svcserv"/>
<dns value="svcserv"/>
</identity>
</endpoint>
</client>
</system.serviceModel>
Если я оставлю для authenticationScheme значение «Согласовать», то яполучить что-то вроде SOAP header Action was not understood.
или, в какой-то момент, Client found response content type of '', but expected 'application/soap+xml'.
Если я изменю схему authenticationScheme на «Ntlm», то получаю Exception: The request failed with HTTP status 401: Unauthorized.
, но я считаю, что это происходит из-за сбоя согласования ( из-зазначение SPN? ), поэтому оно возвращается к «Ntlm» и завершается ошибкой.
Я бы списал это как конфигурацию на сервере IIS, но я проверил настройки.