2013-06-26 6 views
5

Ich habe einen WCF-Webdienst, der von einem WCF-Client und Java verwendet wird. Der .net-Client funktioniert einwandfrei, aber der Java-Client kann nicht kommunizieren und den folgenden Fehler auslösen.Java-Client kann WCF-Dienst nicht verwenden

<s:Fault> 
    <faultcode xmlns:a="http://schemas.microsoft.com/ws/2005/05/addressing/none" xmlns="">a:ActionNotSupported</faultcode> 
    <faultstring xml:lang="en-US" xmlns="">The message with Action '' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).</faultstring> 
</s:Fault> 

Ich habe beide Anfragen erfasst, aber nicht in der Lage, das eigentliche Problem herauszufinden.

Diese Anforderung wird vom .net-Client gesendet.

<MessageLogTraceRecord> 
    <HttpRequest xmlns="http://schemas.microsoft.com/2004/06/ServiceModel/Management/MessageTrace"> 
    <Method>POST</Method> 
    <QueryString></QueryString> 
    <WebHeaders> 
     <Connection>Keep-Alive</Connection> 
     <Content-Length>277</Content-Length> 
     <Content-Type>text/xml; charset=utf-8</Content-Type> 
     <Expect>100-continue</Expect> 
     <Host>devint</Host> 
     <VsDebuggerCausalityData>uIDPoz4EUGTdY91Co1FESc2IENsAAAAAfpHU4m1Iok+wSxmrwkiWZ9iNzD51RjZMnpnEBbceBDcACQAA</VsDebuggerCausalityData> 
     <SOAPAction>"http://tempuri.org/Test/IsPilotUser"</SOAPAction> 
     <X-Forwarded-For>xx.xxx.xxx.xxx</X-Forwarded-For> 
     <X-Optier-Context-Address>43143760</X-Optier-Context-Address> 
    </WebHeaders> 
    </HttpRequest> 
    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
     <To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://service url here</To> 
     <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/Test/IsPilotUser</Action> 
    </s:Header> 
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <IsPilotUser xmlns="http://tempuri.org/"> 
     <UserID>AA</UserID> 
     </IsPilotUser> 
    </s:Body> 
    </s:Envelope> 
</MessageLogTraceRecord> 

Die folgende Anfrage von Java erzeugt wird mandanten

<MessageLogTraceRecord> 
    <HttpRequest xmlns="http://schemas.microsoft.com/2004/06/ServiceModel/Management/MessageTrace"> 
    <Method>POST</Method> 
    <QueryString></QueryString> 
    <WebHeaders> 
     <Cache-Control>no-cache</Cache-Control> 
     <Connection>keep-alive</Connection> 
     <Pragma>no-cache</Pragma> 
     <Content-Length>1414</Content-Length> 
     <Content-Type>text/xml; charset=utf-8</Content-Type> 
     <Accept>text/xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2</Accept> 
     <Host>devint</Host> 
     <User-Agent>Java/1.6.0_25</User-Agent> 
     <SOAPAction>""</SOAPAction> 
     <X-Optier-Context-Address>43526520</X-Optier-Context-Address> 
    </WebHeaders> 
    </HttpRequest> 
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Header xmlns:hdr="http://xml.example.com/ns/appmw/soap/1.0/header"> 
     <hdr:RequestID xmlns:hdr="http://xml.example.com/ns/appmw/soap/1.0/header">287933.1372254929205.341301</hdr:RequestID> 
     <hdr:Timestamp xmlns:hdr="http://xml.example.com/ns/appmw/soap/1.0/header">1372254929205</hdr:Timestamp> 
     <hdr:Principal xmlns:hdr="http://xml.example.com/ns/appmw/soap/1.0/header"> 
     <saml:Assertion xmlns:saml="http://xml.example.com/ns/appmw/soap/1.0/saml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Issuer="PingFederate SiteMinder SOAP Connector" xsi:type="saml:AuthenticationAssertionType"> 
      <saml:Subject> 
      <saml:NameIdentifier> 
       <saml:SecurityDomain>KerberosID</saml:SecurityDomain> 
       <saml:Name>None</saml:Name> 
      </saml:NameIdentifier> 
      <saml:SubjectConfirmation> 
       <saml:AuthenticationMethod>Netegrity</saml:AuthenticationMethod> 
       <saml:SubjectConfirmationData>None</saml:SubjectConfirmationData> 
      </saml:SubjectConfirmation> 
      </saml:Subject> 
     </saml:Assertion> 
     </hdr:Principal> 
     <To SOAP-ENV:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://service url here</To> 
    </SOAP-ENV:Header> 
    <SOAP-ENV:Body> 
     <pf:AttributesRequest xmlns:pf="http://xml.ms.com/ns/webinfra/pingfederate/sso-attributes"> 
     <pf:Data> 
      <pf:HumanNo></pf:HumanNo> 
      <pf:Originator>None</pf:Originator> 
      <pf:UniqueID>None</pf:UniqueID> 
     </pf:Data> 
     <pf:Attribute> 
      <pf:Name>IsPilotUserResult</pf:Name> 
     </pf:Attribute> 
     </pf:AttributesRequest> 
    </SOAP-ENV:Body> 
    </SOAP-ENV:Envelope> 
</MessageLogTraceRecord> 

ich mit Java nicht vertraut bin so wird jede Hilfe dankbar.

Antwort

5

Ihr Java-Client sendet diese http-Header:

SOAPAction="" 

Während .Net dieses sendet:

SOAPAction="http://tempuri.org/Test/IsPilotUser" 

den Java-Client Zwingen Sie den richtigen Wert zu senden.