dit*_*977 15 authentication web-services visual-studio-2008
我想引用一个Web服务,它需要用户/通过身份验证.在VS 2008中,如果我尝试"添加引用"或"添加服务引用",我可以输入的只是URL,无法输入我的凭据.显然,如果我尝试加载ws,它会向我显示一条很好的消息:
请求失败,HTTP状态为403:Forbidden.元数据包含无法解析的引用:HTTP请求未经授权,客户端身份验证方案为"匿名".从服务器收到的身份验证标头是'Basic realm ="weblogic"'.远程服务器返回错误:(401)未经授权.
所以我的问题是:是否有可能(使用VS 2008)添加对受保护的Web服务的引用?怎么样?
听起来你正在尝试使用Web引用,而不是服务引用(尽管我认为Web引用是一种服务引用).在VS08中,在启动"添加服务引用"后,键入Web服务的URL,单击"高级"按钮,然后单击"添加Web引用".再次键入URL,然后单击"添加Web引用".现在你应该有一个Web引用,然后身份验证类似于下面:
WebService.Service myService = new WebService.Service();
myService.Credentials = new System.Net.NetworkCredential("username", "password");
WebService.ResultType results = myService.MyMethodReturnsResultType();
Run Code Online (Sandbox Code Playgroud)
根据服务的身份验证方式,您可能会遇到问题。
如果它使用 ASP.Net 会员资格,就找不到乐趣了。如果服务代码是您的,请暂时禁用身份验证以生成代理。
否则,尝试使用标准机制:
http://username:password@host.domain/service
Run Code Online (Sandbox Code Playgroud)
最佳选择:从供应商处获取 WSDL 并使用wsdl.exe生成代理。
更新回应评论:
是的,如果目标服务是 ASP.net 服务或仅接受并返回简单类型,则模拟服务以生成代理是一个完全合理的计划。
Web 服务构造函数具有接受 Uri 的重载,或者您可以只修改生成的源。
如果您选择修改生成的源,您可能只想提取代理类并删除 Web 服务引用:
使用 VS 生成代理后,如果“显示所有文件”并深入查看 WebService Reference,您将找到一个名为Reference.cs
. 这是您需要的唯一文件。将内容复制到另一个文件,然后删除 Web 服务引用。
如果您这样做,此时您可以将身份验证逻辑添加到代理中。
但同样,从供应商那里获取 WSDL 是您最好的选择。
祝你好运。
归档时间: |
|
查看次数: |
39597 次 |
最近记录: |