我的问题是在ASP.NET MVC中调用经过身份验证的(具有用户名和密码)Web服务(asmx)
我做了以下事情:
尝试使用wsdl.exe
工具创建服务的代理类
使用以下命令语法
wsdl /username:******** /password:************* /domain:********** web service url.asmx?wsdl
但它给了我以下错误:
下载web service url://???.asmx?wsdl
时出错。请求失败,HTTP状态为401: Unauthorized
。
我可以通过提供用户名和密码在浏览器中查看该服务。
当我搜索使用svcutil.exe
创建代理类时,我发现它不能用于经过身份验证的Web服务。
我想询问是否有其他方法可以创建代理类,或者我们是否可以在没有代理类的asp.net mvc应用程序中调用经过身份验证的Web服务。
答案 0 :(得分:4)
我有一个具有相同行为的项目,一个Web服务(asmx)在VPN后面,他们使用用户名/密码来访问它,但在VPN内部就可以了。
很难直接从Visual Studio 生成代理类(可能缺乏对此类场景的支持)但只要您可以看到架构,这个技巧就非常简单浏览器(wsdl部分)。
执行此操作:
?wsdl
链接,转到Source Code
模式并将整个代码复制到本地计算机中的文件中,让我们假设c:\temp
并调用{{1} }} service.wsdl
复制到svcutil.exe
(它位于.NET Framework文件夹中,just search for it)c:\temp
中打开一个终端( Shift + 右键单击,然后在此处选择打开命令窗口)c:\temp
这将生成2个文件,svcutil service.wsdl /out:proxy.cs /config:proxy.config
和proxy.cs
proxy.config
是您的Web服务包装器,您只需要添加到项目中proxy.cs
包含您需要附加到proxy.config
文件的<system.serviceModel>
。现在,您需要做的就是按照生成的包装器编写类似的内容:
web.config