从C#应用程序调用Web服务

时间:2013-11-07 14:22:14

标签: c# asp.net web-services

我使用了一个简单的Web服务getAD.asmx来从活动目录中检索数据。我需要将WS作为特定用户执行,并确保只有公司用户可以使用它,因此我使用的是Windows身份验证和ASP.NET模拟。

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

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";
    }
}

1 个答案:

答案 0 :(得分:1)

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

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

IIS有时候谈论自己可能有点滑稽 - 我读到这是为了防止某种攻击,但从来没有能够再次找到链接!感谢@LeeHarrison,这是叫做Loopback Checking。

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

中所述