【问题标题】:Calling Async WCF service at Application_Exit在 Application_Exit 调用异步 WCF 服务
【发布时间】:2013-04-18 11:03:21
【问题描述】:

我有以下代码..

 Private Sub Application_Exit(ByVal o As Object, ByVal e As EventArgs) Handles Me.Exit
        If MainPage.ModeOfOperation = "PROPOSALMODIFICATION" Then

            MainPage.InitializeServiceEndPoint(client.Endpoint)
            MessageBox.Show("This is a test")
            client.FlagQuotationWithUserAsync(MainPage.FetchQuotationNo, MainPage.FetchReferenceNo, "F", "", "", "")



        End If

    End Sub

但它不起作用,因为我认为在应用程序退出时不允许异步调用。

我也做了以下

  1. 通过 WCF 服务中的以下代码将 Async 方法转换为同步:

OperationContract(AsyncPattern:=False)

然后像

一样从 xaml 调用它
client.SR_IService1_BeginFlagQuotationWithUser(FetchQuotationNo, ID, "T", UserRole, ProdCode, UserID, Nothing, Nothing)

但在应用程序退出时仍然没有调用该函数。

请注意:主要问题是我想在应用程序关闭/退出时做一些事情,我必须调用 WCF 网络服务。请帮助我现在不知道..

【问题讨论】:

    标签: vb.net wcf web-services silverlight asynchronous


    【解决方案1】:

    我会考虑将您的方法调用更改为同步但“一种方式”。

    之后,我会从方法后面的 aplication_exit 代码中调用它。

    我认为在这种情况下,您的应用仍然“存在”(直到方法执行未完成)。

    看看这个简单的帖子作为简短的例子:Need sample fire and forget async call to WCF service

    这个解决方案也可能有帮助:http://www.codeproject.com/Articles/564450/CallingplusintoplusyourplusdatabaseplusonplusSilve

    【讨论】:

    • 你能帮我写一个单向的代码吗?像这样的 OperationContract(AsyncPattern:=False Oneway:=true)。请告诉我。
    • 不,它不起作用。正如我在问题中提到的那样,当我在页面加载或其他地方调用它时它正在工作,但是当我在 application_exit 或 UserControl_lostfocus 中使用它时,它就不起作用了。你有解决办法吗?
    • 已更新 - 另请参阅 codeproject.com/Articles/564450/…
    【解决方案2】:

    我明白你想要完成什么。不幸的是,当应用程序退出时,您可能会在尝试以您正在做的方式进行操作时遇到问题。这是因为您有服务引用的代理,并且您需要了解幕后发生的一大堆事情。此外,如果应用程序关闭的原因是因为 System.ServiceModel 异常,则几乎可以保证您将无法进行此类调用。这也不是最佳实践。 相反,只需使用 REST。 这将 100% 工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 2012-10-03
      • 1970-01-01
      • 2020-01-21
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多