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でいくつかの検索を行いましたが、多くの同様の質問を見つけることができましたが、私の問題を解決するものは何も見つかりませんでした.