私はサードパーティのWebサービスにデータを提出するプログラムを持っています。彼らは、ノンス・キー(NewGuidを使用)を作成しなければならない2要素認証を実装しています。これらには、スクリーン名、URL、タイム・スタンプだけでなく、エンコードされたAPIキーも含まれています。SVCUTILからプロキシコードを生成したカスタムSOAPヘッダ
2017-04-15T17:08:57Z-1265fb1e-bbc3-453a-be409e2a808cbaaeWpyp6EJnIUlSX1rB/YRJxRyp8cXxw2IIrFMnnvuB06cUBabyRLnD 5hPj+ndH8zSIhojvNgc10/az2N+hh6SaMA==
それはそれがあろうと述べている:
は私がnonceを持って作成され、その後、APIキーを使用して、私はデータに署名し、最後に、私はこのような長い文字列を持っていますX-WME-APIトークンと呼ばれるHTTPヘッダーで送信する必要があります。
プロキシクライアントを作成するSVCUTILコマンドラインツールから生成されたMeterDataService.csファイルがあります。私は顧客のヘッダーを追加できる場所はどこにも見当たりません。
は、私はあなたがWebRequestクラスから派生何か持っている場合は、このような何かを行うことができますことを知っている:
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(urlString);
req.ContentType = "text/xml";
req.Headers["X-SPP-API-Token"] = Token;
req.Method = "POST";
しかし、結果のオブジェクトのどれもがWebRequestクラスから派生されていないが、私はこれを行う方法がわからないんだけど。
1つのオブジェクトMeterDataPortClientオブジェクトには、Endpointプロパティがあります。それが私がやる場所ですか?それ、どうやったら出来るの?私はそれが私の質問だと思う。
私はそれはWebRequestクラスから継承することによって、彼らが作成したMeterDataRequestオブジェクトを変更しようとしましたが、その後、私はこのエラーを得た:
は「タイプPostMeterDataRequestはMessageContractを定義するだけでなく、System.Net.WebRequestタイプから派生PostMeterDataRequestの継承階層にあるすべてのオブジェクトは、MessageContractを定義する必要があります。
PostMeterDataRequestの定義は次のとおりです。このクラスにMessageContractAttributeが適用されています。私はそれが意味するものに慣れていません。受信側のサービスがトークンをHTTPヘッダーに入れることを期待しているため、リクエストオブジェクトにHTTPヘッダーを追加する方法を見つける必要があります。私が手にしているコード。
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.ServiceModel.MessageContractAttribute(IsWrapped = false)]
public partial class PostMeterDataRequest : WebRequest // WebRequest added my me later on.
{
[System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://someorg.com/schema/MeterDataSchema/v2", Order = 0)]
public PostMeterDataType PostMeterData;
public PostMeterDataRequest()
{
}
public PostMeterDataRequest(PostMeterDataType PostMeterData)
{
this.PostMeterData = PostMeterData;
}
}