首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF & Silverlight >> pollingDuplexHttpBinding >>在浏览器关闭时从silverlight调用web服务

WCF & Silverlight >> pollingDuplexHttpBinding >>在浏览器关闭时从silverlight调用web服务
EN

Stack Overflow用户
提问于 2012-11-11 15:13:40
回答 1查看 254关注 0票数 1

我有WCF服务器和Silverlight客户端使用pollingDuplexHttpBinding绑定。

我想关闭连接并调用EndSession操作方法,该方法将用户从

活动用户列表,并关闭会话( IsTerminating = true )

代码语言:javascript
复制
    [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = true)]
    void EndSession();

根据,您不能在Application_Exit事件上调用wcf操作,它还提供了一个

对我来说"2多吵“的解决方案,

我在这里有什么选择?这是唯一的办法吗?

1)使用链接解决方案?

2)服务器每隔X秒运行一次检查双工对象状态的方法是否处于活动状态?

代码语言:javascript
复制
(((ICommunicationObject)clientContract.Value).State != CommunicationState.Opened 

3)其他?!简单的内置解决方案?为什么银光是地狱!

EN

回答 1

Stack Overflow用户

发布于 2013-04-03 09:33:08

这就是我刚刚尝试过的解决方案,而且效果很好。它的核心被张贴在你问题的链接中的评论中!:)

Silverlight App.Exit事件:

代码语言:javascript
复制
    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页面,具有以下代码隐藏:

代码语言:javascript
复制
    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应用程序使用导航框架。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13332427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档