私が使用しようとしている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;
}
「IClientMessageInspector」を正直に使ってみました。しかし、私は上記の3つの変数を文字列として 'USER_AGENT_HTTP_HEADER'として渡す方法について何とか困惑していました。私は自分のコードで質問を更新しました。私のプロジェクトは途中でコンソールアプリケーションです。 – Disasterkid
もう少し複雑です。このリンクは、より多くの情報を提供しています:https://msdn.microsoft.com/en-us/library/ms733786(v=vs.110).aspx基本的には、あなたのインスタンスを作成するときにあなたの3つの変数をプロパティとして設定します。 'IClientMessageInspector'実装。 – Nathan