gpt4 book ai didi

wcf - 使用 WCF WebApi 的异步 REST 服务

转载 作者:行者123 更新时间:2023-12-04 15:55:04 25 4
gpt4 key购买 nike

我想知道各位开发者对 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/Self Hosting 中托管它们

期待建议和意见。

最佳答案


那么我的感受,为了在最新的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");
}

关于wcf - 使用 WCF WebApi 的异步 REST 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8951226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com