我在使用IIS 5.1的Win XP上运行的ASMX Web服务时遇到了一些问题。 IIS使用集成Windows身份验证进行设置,并禁用匿名访问。 (当我启用匿名访问时,一切都可以作为魅力。)
但是,当我打开匿名访问并在我的IIS上仅使用集成Windows身份验证运行时,我得到以下异常:
HTTP请求未经授权,客户端身份验证方案为“Negotiate”。从服务器收到的身份验证标头是“Negotiate,NTLM”。
这个异常是从我用来测试这个概念的非常简单的控制台应用程序生成的:
BasicHttpBinding binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows; // .None;
binding.UseDefaultWebProxy = false;
EndpointIdentity spn = EndpointIdentity.CreateSpnIdentity("WORKGROUP/VirtualXP-91051");
Uri uri = new Uri("http://169.254.91.91/MyWebSite/MyService.asmx");
EndpointAddress address = new EndpointAddress(uri, spn);
MyServiceSoapClient client = new MyServiceSoapClient(binding, address);
client.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
String req = "( the request string is blanked out.. ;) )";
string resp = client.ReqAddressData(req);
Console.WriteLine(resp);
Console.ReadLine();
App.config的有趣部分:
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
这不是火箭科学,所以我必须遗漏一些明显的东西。我已经在SO上做了一些搜索,虽然我可以找到很多类似的问题,但我发现没有什么可以解决我的问题。