我有这个方法的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");
}
答案 0 :(得分:1)
调用该方法时,可以在客户端中使用Thread。 但是为了更准确地响应,定义客户端:使用技术等等。
答案 1 :(得分:0)
您可以使用任务并行库或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();
答案 2 :(得分:0)
您可以通过将以下值一起传递给ServiceBehavior
属性来为服务类定义异步行为:
InstanceContextMode = InstanceContextMode.Single
,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");
}
}