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