2017-05-02 6 views
0

私が使用しようとしているSOAP APIは、Javaで動作する例を示しています。 APIへのすべてのリクエストで、ヘッダーに3つの値を追加する必要があります(私はちょうど彼らがドメイン、パスワード、APIキーだと思います)。この目的のために、私たちはこのようorg.apache.axis.client.Stubを上書き:SOAP呼び出し(C#のJava equavalent)へのヘッダの追加

public class SeveraApiStubBase extends org.apache.axis.client.Stub { 

    @Override 

    public org.apache.axis.client.Call _createCall() throws ServiceException { 

     org.apache.axis.client.Call _call = super._createCall(); 

     _call.addHeader(new org.apache.axis.message.SOAPHeaderElement(
       "http://something.somethingelse.com/", "WebServicePassword", "API_KEY")); 

     return _call; 
    } 

} 

そして、我々が提供するヘッダーでメソッドを実行します。

私はC#で何が相当するのだろうかと思っていました。

更新:軸ではなく、C#を使用している場合IClientMessageInspectorクラス

public object BeforeSendRequest(ref Message request, IClientChannel channel) 
{ 
    HttpRequestMessageProperty httpRequestMessage; 
    object httpRequestMessageObject; 
    if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out httpRequestMessageObject)) 
    { 
     httpRequestMessage = httpRequestMessageObject as HttpRequestMessageProperty; 

     if (string.IsNullOrEmpty(httpRequestMessage.Headers[USER_AGENT_HTTP_HEADER])) 
     { 
      httpRequestMessage.Headers[USER_AGENT_HTTP_HEADER] = this.m_userAgent; 
     } 
    } 
    else 
    { 
     httpRequestMessage = new HttpRequestMessageProperty(); 
     httpRequestMessage.Headers.Add(USER_AGENT_HTTP_HEADER, this.m_userAgent); 
     request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestMessage); 
    } 
    return null; 
} 

答えて

0

の使用は、通常は、WCFを使用します。 Axisとは少し違ったアプローチです。

クライアントに既存のWSDLを使用させる場合は、svcutilを使用してサービス契約コードを生成します。 Hereは、この部分を説明するリンクです。それらが提供する例は、すべての操作に対するプリミティブ入力を持つサービスです。したがって、複雑な型クラスの生成は示されません。

次に、message inspectorsを使用して発信要求を代行受信し、ヘッダーを追加できます。 IClientMessageInspectorインターフェイスは、Messageクラスを引数として渡すメソッドBeforeSendRequestを持っています。 MessageクラスにはHeadersコレクションがあり、必要なヘッダーを追加できます。

+0

「IClientMessageInspector」を正直に使ってみました。しかし、私は上記の3つの変数を文字列として 'USER_AGENT_HTTP_HEADER'として渡す方法について何とか困惑していました。私は自分のコードで質問を更新しました。私のプロジェクトは途中でコンソールアプリケーションです。 – Disasterkid

+0

もう少し複雑です。このリンクは、より多くの情報を提供しています:https://msdn.microsoft.com/en-us/library/ms733786(v=vs.110).aspx基本的には、あなたのインスタンスを作成するときにあなたの3つの変数をプロパティとして設定します。 'IClientMessageInspector'実装。 – Nathan

関連する問題