我有一个作为Windows服务实现的WCF服务,我需要从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;
}
}
}
答案 0 :(得分:0)
似乎问题与WCF无关,而是ASP.Net / MVC管理异步的方式,因为它创建了自己的线程。
从ASP.NET / MVC应用程序的任何sincrhonous部分进行异步调用时,请注意将.ConfigureAwait(false)
添加到PostAsync
或GetAsync
方法。否则,PostAsync
或GetAsync
来电将会挂起。