代码之家  ›  专栏  ›  技术社区  ›  Nikolay R

如何在SIlverlight中实现对WCF服务的同步调用?

  •  2
  • Nikolay R  · 技术社区  · 15 年前

    有时我需要在Silverlight中调用WCF服务并阻止UI,直到它返回。当然,我可以分三步完成:

    1. 设置处理程序和块用户界面
    2. 呼叫服务
    3. 完成所有操作后取消阻止UI。

    可能吗?有人真的实现了这样的方法吗?

    看来答案是根本不使用同步呼叫。将为异步调用寻找一些易于使用的模式。看看 this

    4 回复  |  直到 14 年前
        1
  •  9
  •   Marc Gravell    15 年前

    这就是重点;你 不应该 在Silverlight中同步IO。别打了!相反:

    • 禁用UI的任何关键部分
    • 在回调中,处理数据并更新/重新启用UI

    碰巧的是,我正在积极地研究如何使异步模式更容易接近(特别是考虑到Silverlight)。 Here's

        2
  •  2
  •   sipsorcery    15 年前

    我不同意Marc的观点,在一些真实的情况下,您需要执行同步web服务调用。但是,您可能应该避免在UI线程上阻塞,因为这会造成非常糟糕的用户体验。

    ManualResetEvent m_svcMRE = new ManualResetEvent(false);
    MyServiceClient m_svcProxy = new MyServiceClient(binding, address);
    m_svcProxy.DoSomethingCompleted += (sender, args) => {  m_svcMRE.Set(); };
    
    public void DoSomething()
    {
        m_svcMRE.Reset();
        m_svcProxy.DoSomething();
        m_svcMRE.WaitOne();
    }
    
        3
  •  2
  •   John Leitch    14 年前

    下面是一个类,它允许您在SL中同步调用WCF服务: http://johnleitch.blogspot.com/2010/03/easy-way-to-synchronously-call-wcf.html

        4
  •  -1
  •   Raju    14 年前

    使用SL4构建业务应用程序本身是一种错误的方法。我在SL4客户端中遇到异步调用问题。不仅是这个问题。一旦你在登录SL应用程序后进行15分钟的beeak,在中断后,你的SL应用程序将无法保留所有数据。它有时发生得很频繁。