【问题标题】:C#.net application not exiting after throwing web exception and unadvise()C#.net 应用程序在抛出 Web 异常和 unadvise() 后未退出
【发布时间】:2011-09-23 08:04:15
【问题描述】:

我正在开发一个 C# Web 客户端应用程序,它从 Web 服务器接收内容并在成功验证后使用浏览器对象显示它。理想情况下,当应用程序退出并且需要取消订阅网络连接时,我们应该调用IConnectionPoint 的方法Unadvise(cookie)。但是当任何 Web 异常被抛出并且应用程序需要关闭时,应用程序没有响应并且无法退出。当我评论 Unadvise(cookie) 方法时,它工作正常并且应用程序成功退出。

有没有办法在不评论Unadvise(cookie)的情况下解决问题? .

【问题讨论】:

  • 如果我根本不调用 Unadvise(cookie),会有副作用吗?我在某处读到,每当我们调用 Advise 和 Unadvise() 时,系统中都会维护接口的引用指针。如果我们不调用 Unadvise(),该引用指针会发生什么?

标签: c# web-services web-applications


【解决方案1】:

我认为你可以使用多线程 - 隔离线程来调用 unadvise,你可以在超时时终止它。

【讨论】:

  • 感谢您的回复。我一定会试试这个。你能告诉我,如果我根本不打电话给 Unadvise(cookie),会有副作用吗?我在某处读到,每当我们调用 Advise() 和 Unadvise() 时,系统中都会维护一个接口的引用指针。如果我们不调用 Unadvise(),那个引用指针会发生什么?
  • @Himanshu:如果你不打电话给Unadvise,你基本上还在连接,可能会接到电话。如果处理调用的代码无法处理调用,您的应用程序可能会崩溃。试图在不了解 COM 线程模型的情况下引入多线程,而不是按照接口的规则来玩,并不能解决您的问题。
  • @Martin:感谢您的回复。
【解决方案2】:

这可能是公寓的问题。我在这里猜测,但是如果实现IConnectionPoint 的对象在 STA 中,并且想要回调由您的代码实现的另一个接口,并且您的代码不处理消息循环(即,如果您的线程位于 MTA 中,那么.NET 2.0 和转发的默认值)然后对您的代码的回调挂起。

根据您的代码的线程模型和您正在使用的对象,您可以尝试将STAThread 应用于您的 main 方法。

【讨论】:

    猜你喜欢
    • 2017-07-13
    • 2011-04-24
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    相关资源
    最近更新 更多