从 ASP.Net 调用 WCF REST 服务不会返回
本文关键字:服务 返回 REST WCF ASP Net 调用 | 更新日期: 2023-09-27 17:56:53
我有一个WCF服务实现为Windows服务,我需要从 ASP.Net 应用程序调用此服务。WCF 服务使用自定义格式化程序进行响应。
我已经测试了下面的代码,如果我从控制台应用程序甚至单元测试项目运行它,它可以工作,但如果我从 ASP.Net 应用程序调用它,它会挂起。
我已经能够在 WCF 代码中调试请求,我看到它有响应,但客户端没有收到响应。
有谁知道任何可能阻碍响应到达 ASP.NET 客户端应用程序的限制?
public async Task<SomeDataToken> PostData()
{
const string SomeMediaTypeName = "application/some-media-type";
SomeDataToken request = new SomeDataToken();
using (var client = new HttpClient())
{
var formatter = new SomeMedyaTypeFormatter();
client.BaseAddress = new Uri(@"http://localhost:8001/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(SomeMediaTypeName));
client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", SomeMediaTypeName);
try
{
var httpResponse = await client.PostAsync("SomeController/SomeAction", request, formatter);
var result = await httpResponse.Content.ReadAsAsync<SomeDataToken>(new[] { formatter });
return result;
}
catch
{
return null;
}
}
}
问题似乎与 WCF 无关,而是与 ASP.Net/MVC 管理异步的方式有关,因为它创建了自己的线程。
从 ASP.NET/MVC 应用程序的任何单向部分进行异步调用时,请注意向PostAsync
或GetAsync
方法添加.ConfigureAwait(false)
。否则,PostAsync
或GetAsync
呼叫将挂起。