在asmx webmethod中使用httpclient

时间:2017-09-22 15:44:47

标签: c# web-services asynchronous asmx

是否可以使用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;

}

由于

1 个答案:

答案 0 :(得分:1)

您可以在管道中注入一个模块来处理处理而不是实际的.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
    }
}