【问题标题】:Error calling web service 401: Unauthorized调用 Web 服务 401 时出错:未经授权
【发布时间】:2012-06-29 18:55:39
【问题描述】:

我明白了

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

我的网络服务是在 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");

【问题讨论】:

  • 如果你在站点根目录下放置一个文本文件,你能成功GET吗?
  • 你能显示 HTTP 请求和响应以及你用来调用服务的代码吗?
  • @Programming Hero 我已经用更多细节更新了我的问题,谢谢

标签: .net web-services iis-6


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多