从 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;
        }
    }
}

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

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

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