在VS里引用一个加密的Web Service:添加服务引用-〉高级-〉添加web引用,页面跳转到登录界面https://apac1.login...,输入用户名和密码之后,界面显示可用的方法,找到service,点击添加引用,在代码里调用刚才显示可用的方法,有异常抛出,异常信息为
The request failed with the error message:
--
<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="https://apac1.login...">here</a></body>
--.
https://apac1.login即为刚才的登录界面。
如何解决?
Object Moved
返回的是 http 302 吧,表示跳转,让你使用服务器返回的新的地址发请求。
按照异常的提示信息,新的地址就是登录的地址(this document may be found here),但它根本就不是一个合法的web service地址。或者我理解错了你的回答,还请指教,呵呵。
@牧云文仔: 是否返回的是 HTTP 302?如果是的话,就是表示你上一次的请求调用成功后(仅仅表示服务器处理了你的请求,假设要身份认证,并不一定就表示通过了身份认证),服务器将你的请求重定向到了一个新的地址,至于为什么发生此重定向,那你就得看服务端的逻辑了。
比如你在 www.cnblogs.com 首页登录,用户名和密码错了的话,它会将你重定向到登录页面,此时 HTTP 状态码就是 302,如果正确的话,它也会将你重定向到首页,状态码还是 302,如果通过代码来判断的话,就是分析服务器返回的重定向的地址是否是登录页面,如果是,表示没有通过认证,如果不是,表示通过了认证。
因此,你这里具体是什么原因,我不知道,因为我既没看过你的这个服务的文档,也没得到过你调用此服务的包,所以无法分析。我只知道发生了重定向。
没有信息显示返回的是 HTTP 302,但是确实发生了重定向,由于涉及项目信息,不好在这里讨论细节。希望能私下请教。
@牧云文仔: 你用抓包工具看过吗?如果没有请看一下此响应返回的状态码。
通常webservice 加密都是加Token.其实就是在SOAP包的包头里面加个用户名和密码...
在C#封完包后,操作包头好了
这是加密的原因吗?不是Moved?
因为加密,所以需要登录,登录完之后引起了moved,不知有何解决之道...
X509Certificate certificate = X509Certificate.CreateFromCertFile("c:\out.cer")
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ClientCertificates.Add(certificate);
request.Method = "POST";
request.ContentType = "text/xml; charset=utf-8";
............................
不知道你说的是不是这个
不需要证书,也没有证书