在Application_Exit上调用异步WCF服务

时间:2013-04-18 11:03:21

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

我有以下代码..

 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方法转换为同步:
  2. OperationContract的(AsyncPattern:= FALSE)

    然后从xaml调用它

    client.SR_IService1_BeginFlagQuotationWithUser(FetchQuotationNo, ID, "T", UserRole, ProdCode, UserID, Nothing, Nothing)
    

    但是在应用程序退出时仍未调用该函数。

    请注意:主要问题是我想在应用程序关闭/退出时执行某些操作,并且我必须调用WCF Web服务。请帮助我现在不知道..

2 个答案:

答案 0 :(得分:0)

我会考虑将您的方法调用更改为同步,但“单向”。

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

我认为在这种情况下你的应用程序仍然“存在”(直到方法执行没有完成)。

请看一下这个简单的帖子,例如:Need sample fire and forget async call to WCF service

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

答案 1 :(得分:0)

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