我的服务在IIS7上使用Windows身份验证启用。
<binding name="Soap.HttpsBinding" closeTimeout="00:05:00"
openTimeout="00:05:00" receiveTimeout="00:05:00" sendTimeout="00:05:00">
<security mode="Transport">
<transport clientCredentialType="Windows" proxyCredentialType="None">
<extendedProtectionPolicy policyEnforcement="WhenSupported" />
</transport>
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
我的客户使用相同的绑定详细信息成功连接到它。
我最近要求添加基本身份验证以支持某些遗留系统。我认为我知道的一切都说我们可以并排运行。
我启用了基本身份验证,旧系统可以连接。但是,我们现有的所有WCF客户端现在都抛出以下异常:
MessageSecurityException:HTTP请求未经授权,客户端身份验证方案为“Negotiate”。从服务器收到的身份验证标头是'Basic realm =“mydomain.local”,Negotiate,NTLM'。
此致 罗布。
答案 0 :(得分:1)
好的,事实证明这是我遇到的更具误导性的Microsoft错误消息之一。
正在初始请求中创建401身份验证错误,而不会在事件查看器中记录任何异常。
答案似乎是使用system.webServer - &gt; httpErrors
由于我想在URL中使用波浪号(〜),我将配置设置为以下内容:
<httpErrors>
<clear />
<error statusCode="401" responseMode="ExecuteURL" path="~/error.xml" />
</httpErrors>
无论是使用代字号还是ExecuteURL,我最终发现使用以下作品:
<httpErrors>
<clear />
<error statusCode="401" responseMode="File" path="/error.xml" />
</httpErrors>