繁体   English   中英

如何使用WebInvokeAttribute异步调用WCF服务方法?

[英]How to call asynchronously WCF Service method with WebInvokeAttribute?

我有这种方法的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");
}

调用该方法时,可以在客户端中使用Thread。 但是为了更准确地响应,定义客户端:使用技术等。

您可以使用任务并行库或TPL异步调用它。 这是一个例子。 示例代码正在调用WebGet。 WebInvoke或HTTP Post代码有一些不同之处。 请注意,TPL仅适用于.NET Framework 3.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();

您可以通过将以下值一起传递给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");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM