是否可以使用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;
}
由于
答案 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
}
}