WinRT アプリから WCF サービスを呼び出しています。このサービスでは、認証用にいくつかのヘッダーが設定されている必要があります。問題は、サービスに対して複数の呼び出しを同時に行うと、次の例外が発生することです。
この OperationContextScope は順不同で破棄されています。
現在のコードは次のようになります。
public async Task<Result> CallServerAsync()
{
var address = new EndpointAddress(url);
var client = new AdminServiceClient(endpointConfig, address);
using (new OperationContextScope(client.InnerChannel))
{
OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = GetHeader();
var request = new MyRequest(...);
{
context = context,
};
var result = await client.GetDataFromServerAsync(request);
}
}
docs から次のコメントを見つけました。
OperationContextScope ブロック内で非同期の「待機」パターンを使用しないでください。継続が発生すると、別のスレッドで実行される可能性があり、OperationContextScope はスレッド固有です。非同期呼び出しで「await」を呼び出す必要がある場合は、OperationContextScope ブロックの外で使用します。
したがって、明らかにサービスを間違って呼び出しているようです。しかし、正しい方法は何ですか?