2

Iphoneアプリから呼び出されているWebServiceがあります(私も構築しています)

私のWebサービスでは、サービス内で自己ホストされており、クラスオブジェクトがきれいに保たれるようにセキュリティトークンをリクエストのヘッダーに移動したいことを除いて、すべてうまく機能しています。(ヘッダーに入れられない場合は、クラスに入れることに頼りますが、それは少し醜いです)。

このhttp://msdn.microsoft.com/en-us/library/system.servicemodel.operationcontext.incomingmessageheaders.aspx#Y342のコードを見ましたが、ヘッダー値を列挙できないようです。

Fiddler を見ると、ヘッダーがパススルーされていることがわかります

POST http://192.168.1.221:11001/StockControl/json/SubmitResults HTTP/1.1
Device-Token: bwI2YiAHR4q3Ba5JVj99Cw==
Content-Type: application/json
Content-Length: 1663
User-Agent: StockManage/1.0 CFNetwork/609 Darwin/12.1.0

SelfHosted 構成を正しく設定していないのか、必要なインターフェースを実装していないのかわかりません。

WCF IClientMessageInspector と着信 SOAP ヘッダーですが、これは SOAP を使用しており、私は JSON を使用しています。

私のエンドポイントは、次を使用してセットアップされます

WebHttpBinding jsonBind = new WebHttpBinding();
ServiceEndpoint jsonServer = host.AddServiceEndpoint(typeof(POSServer.StockControl.IStockService), jsonBind, "json");

jsonServer.Behaviors.Add(new WebHttpBehavior
{
    DefaultBodyStyle = System.ServiceModel.Web.WebMessageBodyStyle.Bare,
    HelpEnabled = true,
    DefaultOutgoingResponseFormat = WebMessageFormat.Json
});

最後に、私の Service 実装の SubmitResults 関数で

public bool SubmitResults(Business.StockResultData theData)
{
    DateTime uploadTime = DateTime.Now;
    int index = OperationContext.Current.IncomingMessageHeaders.FindHeader("Device-Token", "");
    this.WriteHeaders(OperationContext.Current.IncomingMessageHeaders);
    this.WriteHeaders(OperationContext.Current.RequestContext.RequestMessage.Headers);

ただし、インデックスは常に -1 (見つからない) であり、WriteHeaders はヘッダーを認識できません。

4

2 に答える 2

3

たくさん検索した後、私はここで答えを見つけたと思います。(http://social.msdn.microsoft.com/Forums/pl-PL/wcf/thread/72ee44cc-58bb-45b2-aff7-49d9bbc8176e)

HttpRequestMessageProperty reqMsg = 
          OperationContext.Current.IncomingMessageProperties["httpRequest"] as 
          HttpRequestMessageProperty;
于 2012-09-25T01:24:08.740 に答える
0

これは私にとってはうまくいきます... apiKeyはヘッダー名です

>  var headers =OperationContext.Current.IncomingMessageProperties["httpRequest"];
            var apiToken = ((HttpRequestMessageProperty)headers).Headers["apiKey"];
于 2016-09-10T23:30:57.930 に答える