我目前在我的机器上创建了一个服务,它在本地运行良好,但是当使用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,这两种方法都没有用。我可以在浏览器中导航到它,它看起来很好,但当我真正开始尝试使用它时,我得到上述错误。
答案 0 :(得分:0)
嗯所以你试过transportClientCredential = Windows,它仍然没有工作呃,看看:
来自http://support.microsoft.com/kb/215383
IIS 6.0
使用以下命令检索NTAuthenticationProviders配置数据库属性的当前值: cscript adsutil.vbs获取w3svc / WebSite / root / NTAuthenticationProviders 在此命令中,WebSite是网站ID号的占位符。默认网站的网站ID号为1.
警告请勿执行复制和粘贴操作以粘贴本文中的命令。此操作可能会导致属性设置出现问题。要避免这些问题,请在命令提示符下键入整个命令。
注意如果未定义NTAuthenticationProviders配置数据库属性,则此命令将失败。有关详细信息,请参阅本节前面的说明。
如果启用了协商过程,则此命令将返回以下信息: NTAuthenticationProviders:(STRING)&#34; Negotiate,NTLM&#34;
注意如果您在尝试验证已启用协商过程时收到错误,请确保您没有在&#34; Negotiate&#34;之间留出空格。和&#34; NTLM。&#34;例如,&#34; Negotiate,NTLM&#34;不同于&#34; Negotiate,NTLM。&#34;