2013-07-14 124 views
3

我的问题是在调用认证(具有用户名和密码)在ASP.NET MVC的Web服务(ASMX)呼叫验证Web服务在asp.net MVC

我做了以下内容:

  1. 我通过添加服务引用 到该溶液中加入web服务到项目
  2. 试图通过使用下面的命令语法

    使用工具 创建代理类服务的3210

    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

你在哪里读到SvcUtil工具无法处理认证服务? –

+0

非常感谢约翰先生回复我,当我回到以下链接http://msdn.microsoft.com/en-us/library/aa347733.aspx时,我没有找到和与用户名/传递参数,当看到一些相关的问题,如下面的链接http://stackoverflow.com/questions/2693394/passing-username-and-password-to-svcutil-exe,我发现我无法传递用户名/密码在svcutil命令.....再次感谢 – RProgrammer

+0

只需使用您的浏览器下载WSDL,XSD和任何其他相关文件。然后将“添加服务参考”指向磁盘上的文件。 –

回答

4

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

这将是很难直接从Visual Studio(也许缺乏这样的情况下支持)生成代理类但诀窍是很容易的,只要你可以看到在浏览器中模式(在WSDL部分)。

做这个

  1. 打开浏览器中?wsdl链接,进入Source Code模式和整个代码复制到本地计算机中的文件,let'a承担c:\temp,并呼吁service.wsdl
  2. 复制svcutil.exec:\temp(它在英寸。NET框架文件夹,just search for it
  3. 打开c:\temp移终端 + 右键点击里面的文件夹,并选择在这里打开命令窗口)
  4. 运行以下命令:svcutil service.wsdl /out:proxy.cs /config:proxy.config

这将生成2个文件,proxy.csproxy.config

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

现在,所有你需要做的就是按照生成的包装和写类似:

// Web Service initialization and authentication 
client = new MyNamespace.ServiceSoapClient(); 
client.ClientCredentials.UserName.UserName = cUser; 
client.ClientCredentials.UserName.Password = cPass; 

// do something 
client.InsertCompetitor(model); 

// close connection 
if (client != null && client.State == System.ServiceModel.CommunicationState.Opened) 
    client.Close(); 
+1

非常感谢Balexandre先生的回复,我确定您的程序对我来说很有用,但当我运行svcutil命令时,您提到它给了我以下错误 无法将文件C:\ temp \ service.wsdl作为程序集加载。查看FusionLogs以获取更多信息。 无法加载文件或程序集'file:/// C:\ temp \ service.wsdl'或其某个依赖项。预计该模块将包含程序集清单。 ..我不知道为什么发生这个错误,我搜索了这个错误,并尝试了所有可能给出错误的可能性,但它失败了......再次感谢 – RProgrammer

+1

您需要复制原始代码,您可以不复制从浏览器窗口看到的代码,您需要打开“查看源代码”,并且需要检查文件开头是否有空格字符并将其删除,因为它必须是有效的wdsl文件。 – balexandre

+0

它工作它的工作,真的非常感谢,只有我删除第一行是<?xml version =“1.0”encoding =“utf-8”?>,并且svcutil创建了这两个文件,我现在将继续你的过程 – RProgrammer