Silverlight退出时调用webservice

时间:2010-07-12 13:23:37

标签: c# silverlight web-services

当silverlight退出时如何调用webservice?我需要在silverlight退出时在服务器上发送更新。

6 个答案:

答案 0 :(得分:3)

Application.Exit事件添加事件处理程序。在该处理程序中调用WebService。 XAML /代码看起来像:

<Application 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    x:Class="SilverlightApplication.App"
    Exit="App_Exit">

</Application>

public partial class App : Application
{
    private void App_Exit(object sender, EventArgs e)
    {
        // Code to call WebService goes here.
    }
}

答案 1 :(得分:2)

您无法在Silverlight中关闭应用程序时发出Web请求。

答案 2 :(得分:2)

我有一个需要在关闭之前保存信息的应用程序。我在托管silverlight控件的页面中使用了javascript。

Javascript和用法

<script type="text/javascript">
     var blocking = true;

     function pageUnloading() {
         var control = document.getElementById("Xaml1");
         control.content.Page.FinalSave();
         while (blocking)
             alert('Saving User Information');
     }

     function allowClose() {
         blocking = false;
     }
</script>


<body onbeforeunload="pageUnloading();">

</body>

和 app.xaml.cs

public partial class App : Application
{

     [ScriptableMember()]
     public void FinalSave()
     {

        srTL.TrueLinkClient proxy = new CSRM3.srTL.TrueLinkClient();
        proxy.DeleteAllUserActionsCompleted += (sender, e) =>
            {
                HtmlPage.Window.CreateInstance("allowClose");


            };
        proxy.DeleteAllUserActionsAsync(ApplicationUser.UserName);

     }

}

答案 3 :(得分:1)

答案 4 :(得分:0)

见Justin Niessner回答的评论:你无法取回返回值。如果您正在调用的服务不重要(因为,它只是捕获一些使用情况统计信息),那对您来说可能没问题。如果你需要在任何情况下都有返回值,并且你希望多次使用SL应用程序,你可以写一个纪念品到IsolatedStorage(这是一个同步操作)并在应用程序启动时将它发布到服务器下次。

答案 5 :(得分:0)

是的,只需进行网络服务电话,不要等待返回值..因为它不会到达

这样做:

    private async void Application_Exit(object sender, EventArgs e)
    {
        // Tell DBSERVER_V14 pipe we have gone away
        await connect_disconnect_async(MainPage.username, MainPage.website, false);
    }

但不要这样做:

    private async void Application_Exit(object sender, EventArgs e)
    {
        // Tell DBSERVER_V14 pipe we have gone away
        var status = await SmartNibby_V13.connect_disconnect_async(MainPage.username, MainPage.website, false);
        if (status)
        {
            Console.WriteLine(status);
        }
    }

因为你永远不会有'status'值来测试它。