从ASP.Net调用WCF REST服务不会返回

时间:2016-07-14 14:03:58

标签: c# asp.net .net asp.net-mvc wcf

我有一个作为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;
        }

    }
}

1 个答案:

答案 0 :(得分:0)

似乎问题与WCF无关,而是ASP.Net / MVC管理异步的方式,因为它创建了自己的线程。

从ASP.NET / MVC应用程序的任何sincrhonous部分进行异步调用时,请注意将.ConfigureAwait(false)添加到PostAsyncGetAsync方法。否则,PostAsyncGetAsync来电将会挂起。