【问题标题】:Ping.sendAsync does not work in asp.netPing.sendAsync 在 asp.net 中不起作用
【发布时间】:2015-03-18 20:11:18
【问题描述】:

我在我的 webapp(asp.net) 中使用 ping 类和 SendAsync 方法 但我收到了这个错误:

Ping 请求期间发生异常。

内部异常是:

这里:System.InvalidOperationException:此时无法启动异步操作。异步操作只能在异步处理程序或模块内或在页面生命周期中的某些事件期间启动。如果在执行页面时发生此异常,请确保将页面标记为 。此异常还可能表示尝试调用“async void”方法,在 ASP.NET 请求处理中通常不支持该方法。相反,异步方法应该返回一个任务,调用者应该等待它。 在 System.Web.AspNetSynchronizationContext.OperationStarted() 在 System.ComponentModel.AsyncOperationManager.CreateOperation(对象用户供应状态) 在 System.Net.NetworkInformation.Ping.SendAsync(IPAddress 地址,Int32 超时,Byte[] 缓冲区,PingOptions 选项,对象 userToken)

当我在 winform 应用程序中使用完全相同的代码时,它可以正常工作。

这是我的代码:

public static Ping pi = new Ping();
public static byte[] myb = new byte[] { 0x41, 0x42, 0x43, 0x41,0x43 };
protected void Button1_Click(object sender, EventArgs e)
{
    pi.PingCompleted += new PingCompletedEventHandler(pi_PingCompleted);
    int i = 1;
    object r = pi.SendAsync("192.168.1." + i.ToString(), 2000, myb); // here the error happining
}
public void pi_PingCompleted(object sender, PingCompletedEventArgs ev)
{
    PingReply pr = ev.Reply;
    Response.Write(ev.Reply.ToString());

}  

我处理了所有可能发生但无济于事的异常。

谁能告诉我我做错了什么或我错过了什么? 坦克

【问题讨论】:

  • 什么是 InnerException?
  • System.dll 中出现“System.Net.NetworkInformation.PingException”类型的异常,但未在用户代码中处理其他信息:Ping 请求期间出现异常。
  • 什么是 InnerException?

标签: asp.net ping


【解决方案1】:

请改用SendPingAsync。 SendAsync 使用的是 older asynchronous API design,对于 ASP.NET,您应该使用 newer asynchronous API。

【讨论】:

  • 谢谢斯蒂芬,但这不是解决方案。我从内部异常中发现的是用 Page Async="true" 标记页面。但是如果你想通过 ajax 调用使用 ping 异步,错误就会回来。为了解决这个问题,我创建了新线程并将代码放在那里并通过 ajax 调用启动了线程。
  • @YousefMostafayi:在 ASP.NET 上使用这样的线程是不安全的。正确的解决方案是使用SendPingAsync 和await 返回的任务。反过来,这将要求您标记页面Async。
  • @StephenCleary 在此页面的哪个位置 (docs.microsoft.com/en-us/dotnet/api/…) 是否建议您改用 SendPingAsync?我会为你省去麻烦。它没有。事实上,异步调用它的唯一例子是使用SendAsync。
  • @Ash:微软参考文档一般尽量不要固执己见;它们描述的是你可以做什么,而不是你应该做什么。使用SendAsync 而不是SendPingAsync 作为异步示例的事实很可能是因为这些文档已过时。随意提交 PR;现在所有的 MS 文档都是开源的。
猜你喜欢
  • 2012-04-02
  • 1970-01-01
  • 2011-06-10
  • 2016-07-03
  • 2014-04-25
  • 1970-01-01
  • 2017-07-17
  • 2012-04-05
  • 1970-01-01
相关资源
最近更新 更多