2012-01-19 5 views
1

Visual Studio에서 Service Reference를 처음 사용하고 Java Web Service를 사용하려고합니다. 마법사를 사용하여 Service Reference를 추가했습니다. 마법사는 프록시 코드를 작성하고 구성 파일에 엔드 포인트를 추가했습니다.Service Reference에서 Java Web Service로 호출하면 아무 것도 반환하지 않습니다.

Java Endpoint는 사용자 정의 유형을 단일 매개 변수로 사용합니다. 프록시 객체를 통해 객체를 채우고 서비스 호출로 전달했습니다. 그러나 응답 객체를 보면 모든 속성이 null입니다. 오류가 발생하지 않습니다. 참고로 soapUI를 사용하면 XML을 편집하여 서비스에 보내고 성공적으로 응답을받을 수 있습니다. 오류가 발생하면 soapUI에서 전송 된 XML 오류 메시지를 볼 수 있습니다.

<basicHttpBinding> 
     <binding name="IFX_Product_Binding" 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="Transport"> 
       <transport clientCredentialType="None" proxyCredentialType="None" 
        realm="" /> 
       <message clientCredentialType="UserName" algorithmSuite="Default" /> 
      </security> 
     </binding> 
     <binding name="IFX_Product_Binding1" 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="https://example.com/EX_IFXProduct/services/Product_SoapPort_1234" 
     binding="basicHttpBinding" bindingConfiguration="IFX_Product_Binding" 
     contract="IFX_ProductServiceReference.IFX_Product_PortType" 
     name="Product_SoapPort_1234" /> 
</client> 

질문 :

  1. 내가 올바르게 자바 웹 서비스를 호출하는 건가요

    static void CallJavaEndPoint() 
    { 
        IFX_ProductInqRq inqRQ = new IFX_ProductInqRq(); 
        IFX_ProductInqRqCatSvcRq[] CatSvcRqCollection = new IFX_ProductInqRqCatSvcRq[1]; 
        IFX_ProductInqRqCatSvcRq CatSvcRqItem = new IFX_ProductInqRqCatSvcRq(); 
        IFX_ProductServiceReference.FX_Product_PortTypeClient proxy = new FX_Product_PortTypeClient(); 
        IFX_ProductInqRs response; 
    
        // Remove other code for setting properties for brevity 
        CatSvcRqItem.RequestID = "123456"; 
        CatSvcRqCollection[0] = CatSvcRqItem; 
        inqRQ.CatSvcRq = CatSvcRqCollection; 
    
        // reponse just comes back null, no errors 
        response = proxy.IFX_CustomerAccountDetailInquiry(inqRQ); 
    } 
    

    config 파일에서 다음은

    는 호출 코드?
  2. 반환되는 XML 오류를 어떻게 볼 수 있습니까?
  3. Web Reference 또는 WebRequest/HttpWebRequest를 사용하여이 Java Web Service에 연결하는 것이 더 좋을까요?

답변

1

피들러와 같은 도구를 사용하여 코드에서 보내는 요청/응답을 검사 한 다음 SoapUI를 사용하여 보내는 성공적인 요청과 비교할 수 있습니다.

+0

시도한 피들러는 요청을 보내지 만 서비스는 응답을 보내지 않습니다. Fiddler에 표시되는 XML을 복사하여 soapUI에서 사용할 경우 메시지를 반환합니다. 구성 정보를 변경해야하는지 궁금합니다. – Josh

1

생성 된 Reference.cs 파일을 검토하면됩니다. 다른 네임 스페이스 속성이 있습니다. SoapUI를 사용하여 응답을 검사 할 때 올바른 네임 스페이스를 찾을 수 있습니다. Reference.cs 파일의 모든 네임 스페이스 참조를 SoapUI 응답에서 찾은 네임 스페이스로 바꿉니다.

네임 스페이스 교체가 끝나면 이제 응답이 잘 serialize 된 것을 볼 수 있습니다.

Reference.cs는 생성 된 파일이므로 서비스 참조를 업데이트 할 때 변경 내용이 손실된다는 점에 유의하십시오.