客户端和服务器之间的Silverlight通信

时间:2010-10-12 16:27:18

标签: c# visual-studio-2008 silverlight wcf silverlight-3.0

对不起,我无法发布代码,但这里有详细的内容。

用户打开表单 它添加了一个事件监听器,如:

GP.GlobalInfo.CommWCF.serviceClient.GetFilteredMessageCompleted += new EventHandler<GetFilteredMessageCompletedEventArgs>(serviceClient_GetFilteredMessageCompleted);

然后向服务器发送异步消息以从数据库获取所需数据。 同时,表单添加另一个事件监听器,然后发送另一条消息:

GP.GlobalInfo.CommWCF.serviceClient.GetFilteredMessageCompleted += new EventHandler<GetFilteredMessageCompletedEventArgs>(serviceClient_GetFilteredMessageCompletedAnother);

所以客户端(表单)正在等待返回两条消息。 一旦返回消息,表单将在网格中显示数据。

似乎没有按照我的预期工作。不知何故,消息卡在某处。 所以,我想知道我的做法是否错误。


另一种情况是,我可以点击屏幕上有五个对象。 这五个对象将使用相同的类来创建。 单击对象会带来包含相应数据的表单。 如果我单击第一个对象,表单将添加一个事件侦听器并向服务器发送一条消息。 当表单等待数据时,我关闭表单,然后通过单击另一个对象打开另一个表单。 新表单将添加一个事件侦听器并将新消息发送到服务器。

同时,服务器一直在处理第一个表单消息,并将结果返回到第二个表单..而不是第一个表单(已关闭)。

这就是我现在所经历的。 任何人都可以尽快给我一些解决方案,以便更好地理解Silverlight和WCF。 我想我应该向服务器发送一条停止消息或其他东西..

-------老问题----------

您好,我在客户端和服务器之间进行通信时遇到了一些问题。

打开表单时,会打开三个侦听器。每个监听器都获取所需的数据。

我认为(不确定)Silverlight会在同时使用这三个听众进行通信时卡住。

那么,我是否应该只使用一个同时运行在Silverlight中的侦听器? 好像,

客户询问服务器的数据
客户端从服务器询问B数据 客户端将C数据保存到服务器

那些东西不能同时完成? 我是否始终确保客户端和服务器之间的单一通信过程?

由于

1 个答案:

答案 0 :(得分:0)

问题是事件处理程序只是告诉“当这种操作完成时,给我打电话”。事件处理程序与特定调用无关,而与操作的种类无关。

如果要调用两次相同的操作,则无法附加两个事件处理程序,并且期望每个调用都调用相应的处理程序。发生的事情是,当一个操作完成时,将调用附加到该操作的每个处理程序。

您可以按照以下方式解决问题

  • 为每个特定操作附加单个事件处理程序
  • 当您调用yourOperation_Async()时,您可以将标识符作为userState(最后一个参数)传递
  • 在事件处理程序内部,您可以相应地执行标识符(您可以从yourOperationCompledEventArgs.UserState中检索它),例如。更新正确的表格。

虚拟示例:

...
serviceClient.YourOperationAsync(formName);
...

void serviceClient_YourOperationCompleted(object sender, YourOperationCompletedEventArgs e)
{
    if (e.UserState != null && e.UserState is string)
    {
       string formToUpdate = (string)e.UserState;
       ...
       ... update formToUpdate ...
       ...
    }
}