【发布时间】:2014-04-25 09:56:29
【问题描述】:
我需要将第三方的 Web API 方法集成到 WCF 服务中。 WCF 服务将被另一个外部方调用,他们希望调用和返回是同步的。
我可以使用通常的RestClient.ExecuteAsync 从 API 获取结果。
我为同步调用整理了以下内容:
public static List<Books> GetSyncBooks(int companyId)
{
var response = GetSynchronousBooks(companyId);
var content = response.Result.Content;
List<Books> result = new List<Books>();
return Helpers.JSONSerialiser.Deserialize<BookList>(content);
}
async private static Task<IRestResponse> GetSynchronousBooks(int companyId)
{
var request = BuildGETRequest("Book", companyId);
var response = await RestSharpHelper.ExecuteSynchronousRequest(request);
return response;
}
public static Task<IRestResponse> ExecuteSynchronousRequest(RestRequest request)
{
var client = new RestClient(BaseUrl);
client.AddHandler("application/json", new RestSharpJsonDotNetDeserializers());
var tcs = new TaskCompletionSource<IRestResponse>(TaskCreationOptions.AttachedToParent);
client.ExecuteAsync(request, (restResponse, asyncHandle) =>
{
if (restResponse.ResponseStatus == ResponseStatus.Error)
tcs.SetException(restResponse.ErrorException);
else
tcs.SetResult(restResponse);
});
return tcs.Task;
// BREAKPOINT here shows TASK value as
// Id = 1, Status = WaitingForActivation, Method = "{null}", Result = "{Not yet computed}"
}
然而,问题是我从来没有使用这个得到结果。响应内容始终为空。我做错了什么?
编辑:谢谢斯蒂芬。我在这个主题的一些问题上看到了你的名字:你的分数似乎表明你知道如何解决这个问题。根据您在另一个问题上的回答,我确实实现了 wcf 服务调用。我可以问你一个相关的后续问题吗?像这个例子这样的异步 WCF 服务调用的可扩展性如何?对于每秒 10 到 100 个范围内的多个同时调用,它会“正常工作”,而忽略下游的处理开销吗?
【问题讨论】:
标签: c# wcf asp.net-web-api restsharp