调用Web服务401时出错:未经授权

时间:2012-06-28 09:18:12

标签: .net web-services iis-6

我得到了

  

请求失败,HTTP状态为401:未经授权

我的网络服务是在IIS6上运行的.NET 4。我的客户端是在IIS6上运行的.NET 2

当我在本地主机上运行客户端和服务器时,它可以工作。 当我将服务移动到Web服务器时,我得到上述错误。我设置了允许安装

我已尝试过匿名访问的所有组合。 IIS中集成的Windows身份验证 我可以通过浏览器访问Web服务并使用Web Service Studio调用它,当我从另一个.NET服务调用它时它不起作用

更新

我已检查过IUSR帐户是否具有NTFS文件权限,并且还作为可以通过网络访问服务器的USER添加到本地安全策略中。

当我从WebService Studio调用时,它首先调用两个请求,然后再调用401,然后再调用'Authorization'并运行。见下文。因此,出于某种原因,我的匿名访问无效。因为当我只有匿名访问权限和集成的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");

1 个答案:

答案 0 :(得分:0)

我的问题是IUSR帐户密码错误我只是更改了密码或创建了一个新帐户来运行应用程序池,并修复了它。