在IIS 6.0中托管WCF服务时出错

时间:2010-11-16 20:43:49

标签: wcf web-services iis-6

我目前在我的机器上创建了一个服务,它在本地运行良好,但是当使用IIS 6.0部署到我们的Windows 2003服务器时,我得到了例外:

  

HTTP请求未经授权   客户认证方案   '匿名'。身份验证   从服务器收到的标头是   '协商,NTLM'。

快速谷歌上的错误导致人们相信这很容易解决,但到目前为止,没有任何修复对我有用。

这是我服务的Web.config中的内容:

<services>
   <service name="WcfService2.Service1" 
            behaviorConfiguration="WcfService2.Service1Behavior">
     <endpoint address="" binding="basicHttpBinding" 
               bindingName="basicBindingConfig" 
               contract="WcfService2.IService1"/>
   </service>
 </services>

 <bindings>
   <basicHttpBinding>
     <binding name="basicBindingConfig">
       <security mode="TransportCredentialOnly">
         <transport clientCredentialType="Ntlm"/>
       </security>
     </binding>
   </basicHttpBinding>
 </bindings>

<behaviors>
  <serviceBehaviors>
    <behavior name="WcfService2.Service1Behavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

我的测试客户端有一个App.config:

<bindings>
  <basicHttpBinding>
    <binding name="basicBindingConfig_IService1">
      <security mode="None">
        <transport clientCredentialType="Ntlm" 
             proxyCredentialType="None" realm="" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

我的测试客户端访问调用是:

Dim client As New ServiceReference1.Service1Client()

client.GetData()

知道这里有什么问题吗?我已经尝试将Ntlm类型更改为Windows和None,这两种方法都没有用。我可以在浏览器中导航到它,它看起来很好,但当我真正开始尝试使用它时,我得到上述错误。

1 个答案:

答案 0 :(得分:0)

嗯所以你试过transportClientCredential = Windows,它仍然没有工作呃,看看:

来自http://support.microsoft.com/kb/215383

IIS 6.0

  1. 单击“开始”,单击“运行”,键入cmd,然后按Enter。
  2. 找到包含Adsutil.vbs文件的目录。默认情况下,此目录为C:\ Inetpub \ Adminscripts。
  3. 使用以下命令检索NTAuthenticationProviders配置数据库属性的当前值:   cscript adsutil.vbs获取w3svc / WebSite / root / NTAuthenticationProviders   在此命令中,WebSite是网站ID号的占位符。默认网站的网站ID号为1.

    警告请勿执行复制和粘贴操作以粘贴本文中的命令。此操作可能会导致属性设置出现问题。要避免这些问题,请在命令提示符下键入整个命令。

    注意如果未定义NTAuthenticationProviders配置数据库属性,则此命令将失败。有关详细信息,请参阅本节前面的说明。

    如果启用了协商过程,则此命令将返回以下信息:   NTAuthenticationProviders:(STRING)&#34; Negotiate,NTLM&#34;

  4. 如果步骤3中的命令没有返回字符串&#34; Negotiate,NTLM,&#34;使用以下命令启用协商过程:   cscript adsutil.vbs设置w3svc / WebSite / root / NTAuthenticationProviders&#34; Negotiate,NTLM&#34;
  5. 重复步骤3以验证是否已启用协商过程。
  6. 注意如果您在尝试验证已启用协商过程时收到错误,请确保您没有在&#34; Negotiate&#34;之间留出空格。和&#34; NTLM。&#34;例如,&#34; Negotiate,NTLM&#34;不同于&#34; Negotiate,NTLM。&#34;