使用Visual Studio 2008制作SOAP代理/客户端时遇到问题

时间:2011-11-23 18:37:14

标签: c# .net wcf web-services soap

我有以下Web服务端点地址:

https://*.*.*/XISOAPAdapter/MessageServlet?channel=:TrackTrace:DTHZCOMSD_PI_TRACKTRACE_TRANSP

这些是我正在执行的步骤。

  • 在我的项目中,我转到参考文献 - >添加服务参考。
  • 在地址字段中,我输入上面的地址。
  • VS说:“VS检测到网站安全证书存在问题”
  • 我确认了这个例外。
  • VS表示该服务需要用户名和密码,并要求提供Discovery Credential。
  • 输入提供的用户名/密码组合。
  • 确认。
  • 获取此信息:
  

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); 

仍在寻找一种方法来改变单一服务的认证模式。

0 个答案:

没有答案
相关问题