WCF 允许NTLM .net 3.5sp1 和 IIS7.5

发布于 2024-10-16 08:48:43 字数 4272 浏览 5 评论 0原文

我使用 WCF 调用另一台服务器上的 WCF 服务时收到以下错误。

错误(请求被取消) 传输数据时发生 HTTP 通道。

以下服务在 .net3 上的 IIS7 Box 上运行,但我们最近升级到 IIS7.5 和 .net 3.5sp1,如果我从配置中删除 AllowNtlm 属性,调用会进一步,但不会通过允许服务对数据库进行双跳,然后出现以下错误。

“NT 权限\匿名登录”。

我附上了客户端 app.config 的副本,它使用 iis7 工作,但这

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="Windows">
          <clientCredentials>
            <windows allowNtlm="false" allowedImpersonationLevel="Delegation"/>
          </clientCredentials>
          <dataContractSerializer maxItemsInObjectGraph="4194304"></dataContractSerializer>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding allowCookies="false" bypassProxyOnLocal="false" closeTimeout="00:01:00" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxBufferSize="4194304" maxReceivedMessageSize="4194304" messageEncoding="Text" name="BasicHttpBinding_CalculationWebService" openTimeout="00:01:00" receiveTimeout="00:30:00" sendTimeout="00:10:00" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxArrayLength="16384" maxBytesPerRead="4096" maxDepth="32" maxNameTableCharCount="16384" maxStringContentLength="8192"></readerQuotas>
          <security mode="TransportCredentialOnly">
            <message algorithmSuite="Default" clientCredentialType="UserName"></message>
            <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""></transport>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://server1.domain/WebServices/CacheManagement/CacheBusinessService.svc" behaviorConfiguration="Windows" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_CacheWebService" contract="CacheWCFService.CacheWebService" name="BasicHttpBinding_CacheWebService">
        <identity>
          <servicePrincipalName value="http/server1.domain"></servicePrincipalName>
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

是服务器配置,有什么想法吗?

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="CacheManagementBehavior" name="Iris.WebServices.CacheManagement.CacheWebService">
        <endpoint address="" behaviorConfiguration="" binding="basicHttpBinding"
         bindingConfiguration="basicHttpBinding_CacheManagement" contract="Iris.WebServices.CacheManagement.CacheWebService" />
        <endpoint address="mex" behaviorConfiguration="" binding="basicHttpBinding"
         bindingConfiguration="basicHttpBinding_CacheManagement" contract="IMetadataExchange" />
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="basicHttpBinding_CacheManagement" maxReceivedMessageSize="4194304" receiveTimeout="00:30:00">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows"/>
            <message clientCredentialType="UserName"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="CacheManagementBehavior">
          <dataContractSerializer maxItemsInObjectGraph="4194304" ignoreExtensionDataObject="True"/>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true"/>
          <serviceAuthorization impersonateCallerForAllOperations="true"/>
        </behavior>a
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

I am getting the following error using WCF, calling the a WCF Service on another server.

An error (The request was canceled)
occurred while transmitting data over
the HTTP channel.

The following Services worked on a IIS7 Box on .net3, but we have recently upgraded to IIS7.5 and .net 3.5sp1, if I remove the AllowNtlm attribute out of the Config, the call gets further but does not pass allow the service to do a double hop to the database, i then get the follow error.

'NT AUTHORITY\ANONYMOUS LOGON'.

I have enclosed a copy of the client app.config, which worked using iis7, but

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="Windows">
          <clientCredentials>
            <windows allowNtlm="false" allowedImpersonationLevel="Delegation"/>
          </clientCredentials>
          <dataContractSerializer maxItemsInObjectGraph="4194304"></dataContractSerializer>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding allowCookies="false" bypassProxyOnLocal="false" closeTimeout="00:01:00" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxBufferSize="4194304" maxReceivedMessageSize="4194304" messageEncoding="Text" name="BasicHttpBinding_CalculationWebService" openTimeout="00:01:00" receiveTimeout="00:30:00" sendTimeout="00:10:00" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxArrayLength="16384" maxBytesPerRead="4096" maxDepth="32" maxNameTableCharCount="16384" maxStringContentLength="8192"></readerQuotas>
          <security mode="TransportCredentialOnly">
            <message algorithmSuite="Default" clientCredentialType="UserName"></message>
            <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""></transport>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://server1.domain/WebServices/CacheManagement/CacheBusinessService.svc" behaviorConfiguration="Windows" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_CacheWebService" contract="CacheWCFService.CacheWebService" name="BasicHttpBinding_CacheWebService">
        <identity>
          <servicePrincipalName value="http/server1.domain"></servicePrincipalName>
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

This is the Server Config, any ideas?

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="CacheManagementBehavior" name="Iris.WebServices.CacheManagement.CacheWebService">
        <endpoint address="" behaviorConfiguration="" binding="basicHttpBinding"
         bindingConfiguration="basicHttpBinding_CacheManagement" contract="Iris.WebServices.CacheManagement.CacheWebService" />
        <endpoint address="mex" behaviorConfiguration="" binding="basicHttpBinding"
         bindingConfiguration="basicHttpBinding_CacheManagement" contract="IMetadataExchange" />
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="basicHttpBinding_CacheManagement" maxReceivedMessageSize="4194304" receiveTimeout="00:30:00">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows"/>
            <message clientCredentialType="UserName"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="CacheManagementBehavior">
          <dataContractSerializer maxItemsInObjectGraph="4194304" ignoreExtensionDataObject="True"/>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true"/>
          <serviceAuthorization impersonateCallerForAllOperations="true"/>
        </behavior>a
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

断念 2024-10-23 08:48:43

我们通过从配置中删除 ServicePrincipleName 成功解决了该问题

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="Windows">
          <clientCredentials>
            <windows allowNtlm="false" allowedImpersonationLevel="Delegation"/>
          </clientCredentials>
          <dataContractSerializer maxItemsInObjectGraph="4194304"></dataContractSerializer>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding allowCookies="false" bypassProxyOnLocal="false" closeTimeout="00:01:00" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxBufferSize="4194304" maxReceivedMessageSize="4194304" messageEncoding="Text" name="BasicHttpBinding_CalculationWebService" openTimeout="00:01:00" receiveTimeout="00:30:00" sendTimeout="00:10:00" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxArrayLength="16384" maxBytesPerRead="4096" maxDepth="32" maxNameTableCharCount="16384" maxStringContentLength="8192"></readerQuotas>
          <security mode="TransportCredentialOnly">
            <message algorithmSuite="Default" clientCredentialType="UserName"></message>
            <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""></transport>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://server1.domain/WebServices/CacheManagement/CacheBusinessService.svc" behaviorConfiguration="Windows" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_CacheWebService" contract="CacheWCFService.CacheWebService" name="BasicHttpBinding_CacheWebService" />
    </client>
  </system.serviceModel>
</configuration>

We managed to resolve the issue, by removing ServicePrincipleName from the config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="Windows">
          <clientCredentials>
            <windows allowNtlm="false" allowedImpersonationLevel="Delegation"/>
          </clientCredentials>
          <dataContractSerializer maxItemsInObjectGraph="4194304"></dataContractSerializer>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding allowCookies="false" bypassProxyOnLocal="false" closeTimeout="00:01:00" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxBufferSize="4194304" maxReceivedMessageSize="4194304" messageEncoding="Text" name="BasicHttpBinding_CalculationWebService" openTimeout="00:01:00" receiveTimeout="00:30:00" sendTimeout="00:10:00" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxArrayLength="16384" maxBytesPerRead="4096" maxDepth="32" maxNameTableCharCount="16384" maxStringContentLength="8192"></readerQuotas>
          <security mode="TransportCredentialOnly">
            <message algorithmSuite="Default" clientCredentialType="UserName"></message>
            <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""></transport>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://server1.domain/WebServices/CacheManagement/CacheBusinessService.svc" behaviorConfiguration="Windows" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_CacheWebService" contract="CacheWCFService.CacheWebService" name="BasicHttpBinding_CacheWebService" />
    </client>
  </system.serviceModel>
</configuration>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文