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 はヘッダーを認識できません。