如何处理外部不稳定的代码?

时间:2015-09-08 05:53:31

标签: c# asp.net com

我有asp.net Web Api 2正在使用外部COM Object (pvxcom)的应用程序。在某些原因COM对象挂起的情况下,我没有机会报告pvxcom的错误。

我需要找出一些可以绕过这个问题的东西。我想澄清一些观点。

  1. 如何为外部源设置最大执行时间?
  2. 如何强制浏览器重新发送请求? (有可能吗?)
  3. 如何判断COM对象的哪个程序挂起?
  4. 配置com对象并重新创建是不错的做法?
  5. 你有任何其他想法,如何弄明白?

1 个答案:

答案 0 :(得分:2)

你可以在一个线程中运行它,你可以杀死这个线程,如果它挂起或花费的时间比预期的要长。

这是我的MVC草图,但对于WebApi代码将是相同的。这基于this answer

public ActionResult Index()
{
    var sw = new Stopwatch();
    Exception threadException = null;
    var workerThread = new Thread(() =>
    {
        try
        {
            sw.Start();

            // Access your COM here instead of sleep
            Thread.Sleep(6000);

            sw.Stop();
        }
        catch (Exception ex)
        {
            threadException = ex;
            sw.Stop();
        }
    });

    var timeoutTimer = new System.Threading.Timer((s) =>
    {
        workerThread.Abort();
    }, null, 5000, Timeout.Infinite);

    workerThread.Start();
    workerThread.Join();


    ViewBag.Message = String.Format("Time: {0}; Exception: {1}", sw.Elapsed, threadException);

    return View();
}