2013-04-18 145 views
0

我有下面的代码..异步调用WCF服务在Application_Exit

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服务转换的异步方法同步:

OperationContract的(AsyncPattern:= FALSE)

,然后从xaml调用它就像

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

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

请注意:主要问题是,我想在应用程序关闭/退出时做一些事情,我必须调用WCF Web服务。请帮助我现在没有线索..

回答

0

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

事后,我会从aplication_exit代码后面调用方法。

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

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

该解决方案还可以帮助:http://www.codeproject.com/Articles/564450/CallingplusintoplusyourplusdatabaseplusonplusSilve

+0

你能帮我一个代码的方式吗?像这样的OperationContract(AsyncPattern:= False Oneway:= true)。请告诉我。 – pordi

+0

更新了答案 – evgenyl

+0

不,它不工作。正如我在问题中提到它在页面加载或其他位置调用它时正在工作,但是当我在application_exit或UserControl_lostfocus中使用它时,它不起作用。你有工作吗? – pordi

0

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