我有一个wcf服务,只有在我将其部署到服务器并通过IIS配置后才能运行。我通过IIS express运行它时得到的错误信息是:
主机上配置的身份验证方案('Ntlm,Anonymous')不允许在绑定'BasicHttpBinding'('Negotiate')上配置的身份验证方案。请确保将SecurityMode设置为Transport或TransportCredentialOnly。此外,可以通过IIS管理工具,通过ServiceHost.Authentication.AuthenticationSchemes属性,在元素的应用程序配置文件中更改此应用程序的身份验证方案,通过更新绑定上的ClientCredentialType属性,或通过调整HttpTransportBindingElement上的AuthenticationScheme属性。
我的web.config服务binging看起来像这样:
<services>
<service name="LMS.Services.Services.AppService" behaviorConfiguration="LargeDataRequestBehavior">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHttp_LargeDataRequestBinding" contract="LMS.Services.Services.AppService" />
<endpoint address="mex" binding="basicHttpBinding" bindingConfiguration="basicHttp_LargeDataRequestBinding" contract="IMetadataExchange" />
</service> </services>
我的绑定看起来像这样:
<bindings>
<basicHttpBinding>
<binding name="basicHttp_LargeDataRequestBinding" receiveTimeout="01:00:00" sendTimeout="01:00:00" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" proxyCredentialType="None" realm="" >
</transport>
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
<basicHttpBinding>
</bindings>
非常感谢任何帮助。
答案 0 :(得分:7)
尝试更改此部分。问题是Credential Type Windows的枚举映射到名为Negotiate的协议。 IIS通知您,您的网站尚未启用协商,仅允许基本(无安全性)和Ntlm(另一种Windows安全形式)。
<bindings>
<basicHttpBinding>
<binding>
<security >
<transport clientCredentialType="Ntlm" >
</transport>
</security>
</binding>
</basicHttpBinding>
</bindings>
这里的WTF是“谈判”和“Windows”之间存在不匹配。
答案 1 :(得分:1)
更新IIS Authentication
设置,如下所示:
Disabled
Enabled