[英]How can a WCF client consume a multipart/related java webservice reponse?
[英]how to consume java webservice from .net and wcf
我遇到了互操作性問題。 我來自.net,必須使用x509證書簽署請求以使用Java安全服務。 我在.net wcf客戶端中有WSDL並生成了服務引用,並在app.config中添加了x509證書憑據,但是客戶端未生成預期的SOAP有效負載(在提琴手中跟蹤),並且Java服務拋出錯誤。 WCF客戶端有沒有辦法像Java期望的那樣生成有效載荷?
以下是Java Guys給出的工作請求有效負載。
<soapenv:Envelope xmlns:smok="http://www.javaServer.org/schemas/SmokeTest" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv: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">
<ds:Signature Id="SIG-53" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces PrefixList="smok soapenv" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:CanonicalizationMethod>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#id-52">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces PrefixList="smok" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>dCnj2a+0wptrFSyWzEgwetSTHmM=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>
WgD3P8DWPG4eWXzXiD9+LZosn7ggRPpIC1OAmq9bn0s1HuGhM/fZozfDhEDn5sAF9RtVFiAZxC03
4tW+cuxC5jAHH4GYQud6s5h5sGwvhLshQNVdI6HBBFQWr+J3mUEBbUCExJ6HEe1i2v0+dMQNWezo
E1Ot7klNGxXedHzrlZw=
</ds:SignatureValue>
<ds:KeyInfo Id="KI-DE6BE13CF8D5419B66135109740345572">
<wsse:SecurityTokenReference wsu:Id="STR-DE6BE13CF8D5419B66135109740345573">
<ds:X509Data>
<ds:X509IssuerSerial>
<ds:X509IssuerName>CN=VeriSign Class 1 Individual Subscriber CA - G3,OU=Persona Not Validated,OU=Terms of use at https://www.verisign.com/rpa (c)09,OU=VeriSign Trust Network,O=VeriSign\, Inc.,C=US</ds:X509IssuerName>
<ds:X509SerialNumber>51921456535433584705342517836423530149</ds:X509SerialNumber>
</ds:X509IssuerSerial>
</ds:X509Data>
</wsse:SecurityTokenReference>
</ds:KeyInfo>
</ds:Signature>
</wsse:Security>
</soapenv:Header>
<soapenv:Body wsu:Id="id-52" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<smok:HelloRequest>
<smok:Name>Hello from Heruwala</smok:Name>
</smok:HelloRequest>
</soapenv:Body>
</soapenv:Envelope>
使用帶有“mutualCertificate”的security.mode一個customBinding作為解釋在這里 。 如果失敗,請發布您的請求的外觀(通過Fiddler或Wcf日志記錄),以便我們進行比較。 預期的差異之一是證書將顯示為二進制令牌,而不是X509Data。 我不希望服務器因此而失敗。 如果確實如此,您可以通過從代碼創建整個自定義綁定來解決此問題。 當您需要創建安全元素時,將如下所示:
SecurityBindingElement sec =
SecurityBindingElement.CreateMutualCertificateBindingElement(
MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10, false);
X509SecurityTokenParameters x509Params = new X509SecurityTokenParameters();
x509Params.X509ReferenceStyle = X509KeyIdentifierClauseType.IssuerSerial;
((AsymmetricSecurityBindingElement) sec).InitiatorTokenParameters = x509Params;
或者通過自定義編碼器對X509Data進行硬編碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.