在asp.net MVC中调用经过身份验证的Web服务

时间:2013-07-14 12:51:40

标签: asp.net-mvc wsdl svcutil.exe

我的问题是在ASP.NET MVC中调用经过身份验证的(具有用户名和密码)Web服务(asmx)

我做了以下事情:

  1. 我通过添加服务引用将Web服务添加到项目中 解决方案
  2. 尝试使用wsdl.exe工具创建服务的代理类 使用以下命令语法

    wsdl /username:******** /password:************* /domain:********** web service url.asmx?wsdl

  3. 但它给了我以下错误:

    下载web service url://???.asmx?wsdl时出错。请求失败,HTTP状态为401: Unauthorized

    我可以通过提供用户名和密码在浏览器中查看该服务。

    当我搜索使用svcutil.exe创建代理类时,我发现它不能用于经过身份验证的Web服务。

    我想询问是否有其他方法可以创建代理类,或者我们是否可以在没有代理类的asp.net mvc应用程序中调用经过身份验证的Web服务。

1 个答案:

答案 0 :(得分:4)

我有一个具有相同行为的项目,一个Web服务(asmx)在VPN后面,他们使用用户名/密码来访问它,但在VPN内部就可以了。

很难直接从Visual Studio 生成代理类(可能缺乏对此类场景的支持)但只要您可以看到架构,这个技巧就非常简单浏览器(wsdl部分)。

执行此操作

  1. 在浏览器中打开?wsdl链接,转到Source Code模式并将整个代码复制到本地计算机中的文件中,让我们假设c:\temp并调用{{1} }}
  2. service.wsdl复制到svcutil.exe(它位于.NET Framework文件夹中,just search for it
  3. c:\temp中打开一个终端( Shift + 右键单击,然后在此处选择打开命令窗口
  4. 运行以下命令:c:\temp
  5. 这将生成2个文件,svcutil service.wsdl /out:proxy.cs /config:proxy.configproxy.cs

    • proxy.config是您的Web服务包装器,您只需要添加到项目中
    • proxy.cs包含您需要附加到proxy.config文件的<system.serviceModel>

    现在,您需要做的就是按照生成的包装器编写类似的内容:

    web.config