我想知道开发人员对WCF WebApi服务的看法是什么。
在N层应用程序中,我们可以拥有多层服务。我们可以使用服务来消耗外部服务的数据。在那种情况下,使用WCF 4.0创建异步休息服务是值得的。
public interface IService
{
[OperationContractAttribute(AsyncPattern = true)]
IAsyncResult BeginGetStock(string code, AsyncCallback callback, object asyncState);
//Note: There is no OperationContractAttribute for the end method.
string EndGetStock(IAsyncResult result);
}
但是随着WCF WebApi的发布,仍然需要这种方法吗?创建异步服务?
如何在IIS / WAS /自托管中托管它们
期待提出建议和意见。
答案 0 :(得分:8)
那么我的感觉,为了在最新的WCF WebAPIs(预览6)中创建异步操作,我仍然可以使用相同的模式(Begin / End),但我也可以使用Task编程模型来创建异步操作,这很多简单。
使用任务模型编写的异步操作的一个示例如下所示。
[WebGet]
public Task<Aggregate> Aggregation()
{
// Create an HttpClient (we could also reuse an existing one)
HttpClient client = new HttpClient();
// Submit GET requests for contacts and orders
Task<List<Contact>> contactsTask = client.GetAsync(backendAddress + "/contacts").ContinueWith<Task<List<Contact>>>((responseTask) =>
{
return responseTask.Result.Content.ReadAsAsync<List<Contact>>();
}).Unwrap();
Task<List<Order>> ordersTask = client.GetAsync(backendAddress + "/orders").ContinueWith<Task<List<Order>>>((responseTask) =>
{
return responseTask.Result.Content.ReadAsAsync<List<Order>>();
}).Unwrap();
// Wait for both requests to complete
return Task.Factory.ContinueWhenAll(new Task[] { contactsTask, ordersTask },
(completedTasks) =>
{
client.Dispose();
Aggregate aggregate = new Aggregate()
{
Contacts = contactsTask.Result,
Orders = ordersTask.Result
};
return aggregate;
});
}
[WebGet(UriTemplate = "contacts")]
public Task<HttpResponseMessage> Contacts()
{
// Create an HttpClient (we could also reuse an existing one)
HttpClient client = new HttpClient();
// Submit GET requests for contacts and return task directly
return client.GetAsync(backendAddress + "/contacts");
}
答案 1 :(得分:2)
WCF Web API附带完全异步的HttpClient实现,您可以在IIS中托管,也可以完全托管。
对于异步REST“服务”方案,请阅读“Slow REST”