我有以下Web服务端点地址:
https://*.*.*/XISOAPAdapter/MessageServlet?channel=:TrackTrace:DTHZCOMSD_PI_TRACKTRACE_TRANSP
这些是我正在执行的步骤。
HTML文档不包含Web服务发现信息。 元数据包含无法解析的引用: 的 'https:// * / XISOAPAdapter / MessageServlet通道=:?TrackTrace:DTHZCOMSD_PI_TRACKTRACE_TRANSP'。 HTTP请求未经授权使用客户端身份验证方案 '匿名'。从服务器收到的身份验证标头是 '基本领域=“XISOAPApps”'。远程服务器返回错误:(401) 未经授权。如果在当前解决方案中定义了服务,请尝试 构建解决方案并再次添加服务引用。
如果不是添加服务参考,我会去参考 - >添加服务参考 - >高级 - >添加Web引用并输入上面的地址,我将被要求接受证书并再次进行身份验证。确认后我会得到一个网页:
Message Servlet处于Status OK状态信息:Servlet com.sap.aii.af.mp.soap.web.MessageServlet(Version $ Id: //tc/xi/NW04S_18_REL/src/_adapters/_soap/java/com/sap/aii/af/mp/soap/web/MessageServlet.java#1 $)绑定到/ MessageServlet Classname ModuleProcessor:null localModuleProcessorLookupName的Lookupname: localejbs / ModuleProcessorBean的Lookupname remoteModuleProcessorLookupName:null ModuleProcessorClass not 实例化的ModuleProcessorLocal是实例 com.sap.aii.af.mp.processor.ModuleProcessorLocalLocalObjectImpl0_0 ModuleProcessorRemote未实例化
以及以下文字:
HTML文档不包含Web服务发现信息
任何可能出错的提示?
编辑1:我可以从SOAPSonar调用该服务(使用提供的wsdl文件)设置基本身份验证。如果我使用相同的WSDL生成带有svcutils的代理生成的代码:
var serviceClient = new DTHZCOMSD_PI_TRACKTRACE_TRANSPClient();
serviceClient.Open();
ZCOMSD_PI_TRACKTRACE_TRANSPResponse response;
response = serviceClient.DTHZCOMSD_PI_TRACKTRACE_TRANSP(request)
因以下错误而失败:
{“根据验证,远程证书无效 过程。“}底层连接已关闭:无法建立 SSL / TLS安全通道的信任关系。
(证书已导入Windows) 我怎么能绕过它呢? 如何为svcutil生成的代码进行简单身份验证添加用户名/密码?
EDIT2:
我能够通过将wsdl文档直接传递给VS(而不是传递服务URL)来添加服务引用。认证和授权方面存在一些问题。
凭证问题解决得非常快: 代码:
service.ClientCredentials.Windows.ClientCredential = new NetworkCredential("user", "pass");
service.ClientCredentials.UserName.UserName = "user";
service.ClientCredentials.UserName.Password = "pass";
和app.config
<binding>
...
<transport clientCredentialType="Basic" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
...
</binding>
认证需要更长时间。 我尝试更改单个服务的认证模式,但它不起作用 知道为什么吗?
service.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
不幸的是,现在绕过它的唯一方法是以这种方式信任所有证书:
System.Net.ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
仍在寻找一种方法来改变单一服务的认证模式。