0

我有以下代码..

 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 Web 服务。请帮助我现在不知道..

4

2 回答 2

0

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

于 2013-04-18T14:19:01.683 回答
0

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

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

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

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

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

于 2013-04-18T12:53:25.207 回答