4

この1つの方法でWCFサービスを使用しています。そのメソッドにはWebInvoke属性があります。どうすれば非同期で呼び出すことができますか?

[WebInvoke(UriTemplate = "*", Method = "*")]
public Message HandleRequest()
{
    var webContext = WebOperationContext.Current;
    var webClient = new WebClient();

    return webContext.CreateStreamResponse(webClient.OpenRead("http://site.com"), "text/html");
}
4

3 に答える 3

1

そのメソッドを呼び出すときに、クライアントでスレッドを使用できます。ただし、より正確な応答を得るには、クライアントを定義します。テクノロジーが使用されているかどうかなどです。

于 2013-01-17T13:58:22.047 に答える
0

タスク並列ライブラリまたはTPLを使用して非同期的に呼び出すことができます。これが例です。サンプルコードはWebGetを呼び出しています。WebInvokeまたはHTTPPostコードにはいくつかの違いがあります。TPLは、.NETFramework3.5以降からのみ使用できることに注意してください。

System.Threading.Tasksを使用して追加します。あなたの用途に

  //URL that points to your REST service method
                var request = WebRequest.Create(url);                   
                var task = Task.Factory.FromAsync<WebResponse>(
                            request.BeginGetResponse,
                            request.EndGetResponse,
                            null);
                var dataStream = task.Result.GetResponseStream();
                var reader = new StreamReader(dataStream);
                var responseFromServer = reader.ReadToEnd();
                reader.Close();
                dataStream.Close();
于 2013-01-18T00:04:26.743 に答える
0

ServiceBehavior次の値を一緒に属性に渡すことで、サービスクラスに非同期動作を定義できます。

  1. InstanceContextMode = InstanceContextMode.Single
  2. ConcurrencyMode = ConcurrencyMode.Multiple

結果のコードは次のようになります。

[ServiceContract]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class MyService
{
    [WebInvoke(UriTemplate = "*", Method = "*")]
    public Message HandleRequest()
    {
        var webContext = WebOperationContext.Current;
        var webClient = new WebClient();

        return webContext.CreateStreamResponse(webClient.OpenRead("http://site.com"), "text/html");
    }
}
于 2013-01-30T15:01:33.960 に答える