WCF で C#5 Async-Await を使用すると、残りのコードが別のスレッドで続行される場合に待機した後、現在の操作コンテキストが失われます。(OperationContext.Current は null です)。
別の外部サービスを呼び出す WCF サービスに取り組んでいます。また、操作コンテキストにアクセスする外部サービス呼び出しで使用されるカスタム バインディング拡張機能がいくつかあります。したがって、この呼び出し中にコンテキストを伝播する必要があり、操作コンテキストをローカル変数にコピーするだけでは機能しません。
私の設定は次のようになります
<system.serviceModel>
<bindings>
<customBinding>
<binding name="MyCustomBinding">
<MyBindingExtention/>
<security authenticationMode="UserNameOverTransport" />
<textMessageEncoding maxReadPoolSize="64" >
<readerQuotas maxStringContentLength="8192" />
</textMessageEncoding>
<httpsTransport manualAddressing="false" maxReceivedMessageSize="65536" />
</binding>
</customBinding>
<client>
<endpoint address="https://ExternalService.svc" binding="customBinding" bindingConfiguration="MyCustomBinding" contract="Contract" name="ExternalService"/>
</client>
</bindings>
<extensions>
<bindingElementExtensions>
<add name="MyBindingExtention" type="Bindings.MyBindingExtention, Services, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</bindingElementExtensions>
</extensions>
</system.serviceModel>
「MyBindingExtention」は、操作コンテキストにアクセスして情報を取得します。
public async Task<string> GetExternalData(int value)
{
var oc = OperationContext.Current;
//External Web service Call
var response = await externalService.GetDataAsync();
return response.text;
}
OperationContext を外部サービス呼び出しに伝達し、その後、残りのコード実行に伝達する良い方法はありますか?