这是我刚刚尝试过并且有效的解决方案。它的核心发布在您问题链接的评论中!:)
银光App.Exit
事件:
private void Application_Exit(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(App.SessionId))
return;
var page = HtmlPage.Document.DocumentUri;
UriBuilder builder = new UriBuilder();
builder.Scheme = page.Scheme;
builder.Host = page.Host;
builder.Port = page.Port;
builder.Path = page.LocalPath;
string request = builder.Uri.ToString();
request += "?closing=" + App.SessionId;
System.Windows.Browser.ScriptObject obj = System.Windows.Browser.HtmlPage.Window.CreateInstance("XMLHttpRequest");
obj.Invoke("open", "POST", request, false);
obj.Invoke("setRequestHeader", "Content-Type", "application/x-www-form-urlencoded");
obj.Invoke("send", "");
}
上面的代码向承载 Silverlight 对象的页面发送一个请求,该页面是一个 ASPX 页面,并具有以下代码隐藏:
protected void Page_Load(object sender, EventArgs e)
{
if (!String.IsNullOrEmpty(this.Request.QueryString["closing"]))
chatSvc.Quit(this.Request.QueryString["closing"]);
}
chatSvc
显然,应该是对您的服务的引用以及Quit
您在客户端关闭时要调用的任何方法。您可以通过查询字符串传递所需的参数。
我承认,这并不漂亮,但它确实有效。
编辑:我不DocumentUri
直接使用的原因是因为我正在为我的 Silverlight 应用程序使用导航框架。