【问题标题】:call Web Service from C# application从 C# 应用程序调用 Web 服务
【发布时间】:2013-11-19 05:42:43
【问题描述】:

我有一个简单的 Web 服务 getAD.asmx,用于从活动目录中检索数据。我需要以特定用户身份执行 WS,并确保只有企业用户才能使用它,所以我使用的是 Windows 身份验证和 ASP.NET Impersonation。

我尝试添加一个本地简单的 web 表单来测试我的服务,它似乎可以正常工作

getAD myWS = new getAD();
string testResult = myWS.test(); // testResult execute correctly

现在我正尝试从另一个 C# 应用程序调用相同的服务,因此我添加了一个 Web 引用并进行了相同的调用,但是我收到任何用户的 401 错误(未经授权)。

rbasws01.getAD myWS = new rbasws01.getAD();
string testResult = myWS.test(); // error 401, not authorized

我错过了什么吗?



编辑:这是我的 WebService 的代码

[WebService(Namespace = "http://myUri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class getAD : System.Web.Services.WebService {

    [WebMethod]
    public string test() {
        return "Test positive";
    }
}

【问题讨论】:

  • 您是否尝试在http://example.com 内的某个地方执行http://example.com/webservice/getAD
  • 如果我使用浏览器并输入 http://myServer/webservice/getAD.asmx 我可以看到现有方法
  • 是的,但是您是否已将其部署在具有 example.com 指向的 IIS 的服务器上?
  • 我只在我的公司网络中使用这个服务器,所以我只使用http://myServer/

标签: c# asp.net web-services


【解决方案1】:

尝试在您的 IIS 上设置localhost:[some-port-number] 绑定并将您的网络服务请求指向该绑定。

因此,不要调用http://myUri.org/ws/something,而是从您的应用程序中调用http://localhost:1234/ws/something

IIS 有时在自言自语时会有点搞笑 - 我读这篇文章是为了防止某种攻击,但再也找不到链接了! 感谢@LeeHarrison,这是称为环回检查。

解决此问题的另一种方法是禁用环回检查,如 this KB Article 中所述。

【讨论】:

  • 你是对的,这叫做环回预防。旧版本的 IIS 可能会被欺骗,认为攻击者是本地计算机上的某个人,并授予原本更难以获得的权限。这可以通过一些注册表调整来禁用。如果您有兴趣,请谷歌“禁用环回 IIS”。
  • @LeeHarrison 谢谢!我永远无法弄清楚要谷歌什么,所以干杯。
  • @dav_i 它没有帮助解决我的问题,但很有趣
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多