2012-01-19 8 views
1

Visual Studioでサービスリファレンスを使用するのが初めてで、Java Webサービスを使用しようとしています。ウィザードを使用してService Referenceを追加しました。ウィザードはプロキシコードを作成し、設定ファイルにエンドポイントを追加しました。サービス参照からJava Webサービスへの呼び出しで何も返されない

Javaエンドポイントは、単一のパラメータとしてカスタムタイプを取ります。私はプロキシオブジェクトを介してオブジェクトにデータを設定し、その呼び出しをサービスに渡しました。しかし、応答オブジェクトを見ると、すべてのプロパティがnullになります。エラーはスローされません。私がsoapUIを使用するとき、私はXMLを編集してサービスに送信し、正常に応答することに注意してください。エラーが発生した場合は、soapUIで返されたXMLエラーメッセージを表示できます。

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); 
} 

設定ファイルから:ここで

は、呼び出し元のコードである

<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. 私が正しくJavaのWebサービスを呼び出していますか?
  2. 返されるXMLエラーをどのように表示しますか?
  3. Web ReferenceまたはWebRequest/HttpWebRequestを使用してこのJava Webサービスに接続する方がよいでしょうか?

答えて

1

コードから送信している要求/応答を調べ、SoapUIで送信した正常な要求と比較するために、Fiddlerのようなツールを使用できます。

+0

Tried Fiddlerはリクエストを送信しますが、サービスは応答を返送しません。 Fiddlerに表示されているXMLをコピーしてsoapUIで使用すると、メッセージが返されます。私は設定情報を変更する必要があるかどうか疑問に思っています。 – Josh

1

生成したReference.csファイルを確認するだけです。異なる名前空間属性がいくつかあります。 SoapUIを使用して応答を調べると、正しい名前空間が見つかります。 Reference.csファイル内のすべての名前空間参照を、SoapUI応答で見つかった名前空間に置き換えます。

名前空間の置換が完了すると、応答がすぐにシリアル化されるようになります。

Reference.csは生成されたファイルであり、サービス参照を更新するときに変更が失われることに注意してください。

関連する問題