2012-08-15 4 views
0

IIS 7.5에서 실행되는 WCF (.NET 4.0) 서비스가 있습니다. Java 클라이언트에서 제어 할 수없는 요청을 수락해야합니다. 클라이언트 측 사람에 따르면 그들은 비누 봉투에 내용을 넣고 서명 한 다음 HTTPS를 통해 텍스트로 게시합니다. 아주 간단하게 들리지만이 오류는 추적 로그에 표시됩니다.Java 클라이언트에서 POST를 허용하는 WCF 서비스 관련 문제

EndpointDispatcher에서 ContractFilter가 일치하지 않아서 수신기에서 'xxxxxxx'동작이있는 메시지를 처리 ​​할 수 ​​없습니다. 계약 불일치 (보낸 사람과받는 사람 간의 동작이 일치하지 않음) 또는 보낸 사람과받는 사람 사이의 바인딩/보안 불일치가 원인 일 수 있습니다. 발신자와 수신자가 동일한 계약 및 동일한 바인딩 (메시지, 전송, 없음과 같은 보안 요구 사항 포함)을 가지고 있는지 확인하십시오.

관련 설정 :

<basicHttpBinding> 
<binding name="XXhttpBinding"> 
    <security mode="Transport"> 
    </security> 
</binding> 
</basicHttpBinding> 

<service name="XXXWcfLib.XXMessageService" behaviorConfiguration="XXBehavior"> 
<endpoint address="ProcessMessage" binding="basicHttpBinding" bindingConfiguration="XXhttpBinding" contract="XXXWcfLib.IXXMessageService" name="ProcessMessage"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 
    <host> 
     <baseAddresses> 
     <add baseAddress="https://sub.domain.com/XXService/XXXService.svc" /> 
     </baseAddresses> 
    </host> 
</service> 

의 ServiceContract 인터페이스 :

<OperationContract()> 
Function ProcessMessage(ByVal Message As String) As String 

편집 : 자바 클라이언트의 게시물에서

헤더 :

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
    <SOAP-SEC:Signature SOAP:mustUnderstand="1" xmlns:SOAP- SEC="http://schemas.xmlsoap.org/soap/security/2000-12" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"> 
    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 
     <SignedInfo> 
     <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">  </CanonicalizationMethod> 
     <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"> </SignatureMethod> 
     <Reference URI="#Body"> 
     <Transforms> 
      <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform> 
     </Transforms> 
     <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod> 
     <DigestValue>----------------------</DigestValue> 
     </Reference> 
    </SignedInfo> 
    <SignatureValue>---------------------</SignatureValue> 
    <KeyInfo> 
    <X509Data> 
     <X509Certificate></X509Certificate> 
     <X509IssuerSerial> 
     <X509IssuerName>-------------------</X509IssuerName> 
     <X509SerialNumber>################</X509SerialNumber> 
     </X509IssuerSerial> 
    </X509Data> 
    </KeyInfo> 
</Signature> 
</SOAP-SEC:Signature> 
<To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">https://sub.domain.com/xxse rvice/xxservice.svc/ProcessMessage</To> 
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">appaction</Action> 
</s:Header> 
+1

샘플 .NET 클라이언트를 빌드하고 서비스를 호출하고 Fiddler로 작성된 원시 요청을 검사 한 다음 Java 클라이언트 요청과 비교하여 차이점을 찾아내는 것이 좋습니다. – Rajesh

답변

0

내 INTERF을 변경 끝났다 에이스 :

<OperationContract()> 
    Function ProcessMessage(ByVal Message As Stream) As String 

다음 구현에서 수동으로 유효성 검사 메시지를 처리했습니다.

관련 문제