2017-09-20 1 views
0

私はサードパーティの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; 
    } 
} 

答えて

0

最後に解決策が見つかりました。私が検索したほど以前には見つけられなかったのは、この以前の投稿でしたが、それは機能しました。最初の答えの指示に従い

How to add Custom HTTP Header for C# Web Service Client

は美しく働きました。

関連する問題