2013-10-17 39 views
3

我从调用第三方java web服务的WSDL文件生成了WCF客户端服务代理。现在我需要配置绑定和代理来调用Web方法。是否可以从SOAP信封中确定WCF绑定配置?

但是,我只有以下SOAP信息,用户名和密码以及客户端证书。我怎样才能解决我需要做的事情?

是否有任何“与配置相反”的应用程序或教授所需技能的网站?

我想我是在“这部分信息,转化为这种配置”。谁能帮忙?

出于同样的项目,我问this question,所以如果有人知道什么要问的第三方,这也将有所帮助(我会将此描述为“通信信息”,但我不认为足够具体)。

<env:Envelope xmlns:env=http://schemas.xmlsoap.org/soap/envelope/xmlns:enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns0="http://etis.ford.com/services/fsa/1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <env:Header> 
     <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" env:mustUnderstand="1"> 
     <wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-messagesecurity-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="token-2-1172677451503-9243153">MIICDTCC……..k/j8lARlQ==</wsse:BinarySecurityToken> 
     <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
     <ds:SignedInfo> 
     <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
     <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> 
     <ds:Reference URI="#element-1-1172677451465-2619907"> 
     <ds:Transforms> 
      <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
     </ds:Transforms> 
     <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> 
     <ds:DigestValue>k_REDACTED_=</ds:DigestValue> 
     </ds:Reference> 
     </ds:SignedInfo> 
     <ds:SignatureValue>k_REDACTED_=</ds:SignatureValue> 
     <ds:KeyInfo> 
     <wsse:SecurityTokenReference wsu:Id="reference-3-1172…..1504-94…25"> 
     <wsse:Reference URI="#token-2-117…..51503-9…3" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/></wsse:SecurityTokenReference> 
     </ds:KeyInfo> 
     </ds:Signature> 
     </wsse:Security> 
    </env:Header> 
    <env:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"wsu:Id="element-1-1172677451465-2619907"> 
     <ns0:list> 
      <String_1>k_REDACTED_</String_1> 
     </ns0:list> 
    </env:Body> 
    </env:Envelope> 

下生成到我的app.config。它没有例外,但我得到的响应(在正确形成的XML中)包含了“无”的对象 - 实际的响应看起来像我发送的镜像。

<bindings> 
    <basicHttpBinding> 
     <binding name="MyBinding" closeTimeout="00:01:00" openTimeout="00:01:00" 
      receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" 
      bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
      maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
      messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
      useDefaultWebProxy="true"> 
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
       maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
      <security mode="None"> 
       <transport clientCredentialType="None" proxyCredentialType="None" 
        realm="" /> 
       <message clientCredentialType="UserName" algorithmSuite="Default" /> 
      </security> 
     </binding> 
    </basicHttpBinding> 
</bindings> 
<client> 
    <endpoint address="http://myurl" 
     binding="basicHttpBinding" bindingConfiguration="MyBinding" 
     contract="wsServiceProxy.ServiceName" name="MyServicePort" /> 
</client> 

请求:

POST http://www.thehost.com/ 
Content-Type: text/xml; charset=utf-8 
VsDebuggerCausalityData: uIDPo2dteAUjcNNDmQ28Qhsz8KcAAAAARUELWtvXc06cOf2eOs23AWKlzgCLFBNImUOop7Ho+PoACQAA 
SOAPAction: "" 
Host: www.thehost.com 
Content-Length: 299 
Expect: 100-continue 
Connection: Keep-Alive 

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <list xmlns="http://thehost.com"> 
      <String_1 xmlns="">MyString</String_1> 
     </list> 
    </s:Body> 
</s:Envelope> 

响应:

HTTP/1.1 200 OK 
Date: Thu, 24 Oct 2013 14:17:20 GMT 
Server: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/1.0.0a mod_jk/1.2.31 
X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1 
VsDebuggerCausalityData: uIDPo2dteAUjcNNDmQ28Qhsz8KcAAAAARUELWtvXc06cOf2eOs23AWKlzgCLFBNImUOop7Ho+PoACQAA 
SOAPAction: "" 
host: www.thehost.com 
Expect: 100-continue 
connection: Keep-Alive, Keep-Alive 
Content-Length: 299 
Keep-Alive: timeout=2, max=100 
Content-Type: text/xml;charset=utf-8 

<s:Envelope xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> 
    <s:Body xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'> 
     <list xmlns='http://thehost.com'> 
      <String_1 xmlns=''>MyString</String_1> 
     </list> 
    </s:Body> 
</s:Envelope> 
+1

您是如何创建代理的?我很惊讶,创建代理不会创建绑定配置。 –

+0

我得到了一个WSDL文件,我添加为服务参考 –

+0

我已经粘贴了它,但我认为它没有正常工作,因为响应是我发送的镜像的镜像。这似乎序列化为一个实例化的对象(与响应中的对象不同),它没有设置属性。 –

回答

2

使用此定义绑定:

<customBinding> 
     <binding name="NewBinding0"> 
      <textMessageEncoding messageVersion="Soap11" /> 
      <security authenticationMode="MutualCertificate" includeTimestamp="false" 
       messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"> 
       <secureConversationBootstrap /> 
      </security> 
      <httpTransport /> 
     </binding> 
</customBinding> 

确保装饰你的合同只签:

[System.ServiceModel.ServiceContractAttribute(ConfigurationName=..., ProtectionLevel=System.Net.Security.ProtectionLevel.Sign)] 

除了客户端证书之外,还需要配置服务证书。你(可能)没有这样的证书,那么只需在那里配置任何虚拟证书(甚至与客户端一样)。

请参阅this link以获取更多可能的错误解决方案。

+0

我已经使用证书在没有问题之前,我们也有自己的问题。如果你看看我的另一个问题(http://stackoverflow.com/q/19431827/198048),你会看到第三方并没有给我很多东西继续下去。我无法测试这个,直到我解决了这个问题。 –

+0

我要添加代码来装饰合同? –

+1

reference.cs。这是代理引用的文件。 http://webservices20.blogspot.co.il/2008/10/who-moved-my-service-reference.html –