在 asmx webmethod 中使用 httpclient

using httpclient in asmx webmethod

是否可以使用 httpclient 在 ASMX WebMethod 中调用 REST 服务? httpclient 库是异步的,因为 asmx 不支持异步等待 (TAP),所以我使用 .Result 强制调用同步。但是,这次 httpclient 无法成功调用,我收到远程服务器主动拒绝连接错误。如果我 运行 使用 async await 或 .Result 的 win 表单应用程序中的同一段代码,它工作正常。

这是 ASMX WebMethod 的问题吗?

[WebMethod]
public void Get(){

   //Sample (off the top of my head)
   HttpClient client = new HttpClient();
   //more code
   Task.Run(()=> client.GetDocument()).Result;

}

谢谢

您可以在管道中注入一个模块来处理处理过程,而不是实际的 .asmx 代码。但我建议在遇到麻烦之前,只需使用 HttpWebRequest.

不做.Result。不要在 Asp.Net 上下文中执行 Task.Run()

模块:

public class Proxy : IHttpModule
{
    public void Init(HttpApplication context)
    {
        var wrapper = new EventHandlerTaskAsyncHelper(DoAsyncWork);
        context.AddOnBeginRequestAsync(wrapper.BeginEventHandler, wrapper.EndEventHandler);
    }

    async Task DoAsyncWork(object sender, EventArgs e)
    {
        // await... anything
    }
}