我明白了
请求失败,HTTP 状态 401:未授权
我的 Web 服务是在 IIS6 上运行的 .NET 4。我的客户端是在 IIS6 上运行的 .NET 2
当我在本地主机上运行客户端和服务时,它可以工作。当我将服务移动到 Web 服务器时,出现上述错误。我已经设置了允许
我已经在 IIS 中尝试了匿名访问和集成 Windows 身份验证的所有组合 我可以通过浏览器访问 Web 服务并使用 Web Service Studio 调用它 好的,当我从另一个 .NET 服务调用时它不起作用
更新
我检查了 IUSR 帐户是否具有 NTFS 文件权限,并且还作为可以通过网络访问服务器的 USER 添加到本地安全策略中。
当我从 WebService Studio 调用时,它会发出两个请求,首先调用返回 401,然后再次调用传递“授权”并工作。见下文。所以由于某种原因,我的匿名访问不起作用。当我只勾选匿名访问并且未勾选集成 Windows 身份验证时,我什至无法从浏览器访问它
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://tempuri.org/HelloWorld"
Host: webdev1
Content-Length: 314
Expect: 100-continue
Connection: Keep-Alive
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><HelloWorld xmlns="http://tempuri.org/"><echo>sd</echo></HelloWorld></soap:Body></soap:Envelope>
HTTP/1.1 401 Unauthorized
Content-Length: 1539
Content-Type: text/html
Server: Microsoft-IIS/6.0
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
Date: Thu, 28 Jun 2012 12:26:33 GMT
Proxy-Support: Session-Based-Authentication
呼叫 2(自动发生)
POST http://webdev1/CSHRService/CSHR.asmx HTTP/1.1
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://tempuri.org/HelloWorld"
Authorization: Negotiate YIILzQYGKwYBBQUCoIILwTCCC72gJDAiB/EG1WyqaLj3E67GA0......
Host: webdev1
Content-Length: 314
Expect: 100-continue
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><HelloWorld xmlns="http://tempuri.org/"><echo>sd</echo></HelloWorld></soap:Body></soap:Envelope>
HTTP/1.1 200 OK
Date: Thu, 28 Jun 2012 12:26:34 GMT
Server: Microsoft-IIS/6.0
WWW-Authenticate: Negotiate oYGgMIGdoAMKAQChCwYJKoZIgvcSAQICooGIBI..
X-AspNet-Version: 4.0.30319
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: 360
我调用服务的代码只是
CSHRService cshrService = new CSHRService();
string s = cshrService.HelloWorld("d");