[Silverlight] 一个易犯的错误:关于调用 WCF 服务
2008-07-19 16:36
423 查看
在采用 Silverlight 调用 WCF 的开发过程中,今天遇到一个错误。
由于 Silverlight 中只支持异步方式的 WCF 调用,所以代码一般是这样子的:
var myServiceClient = new MyServiceClient();
myServiceClient.GetSomeDataCompleted += (sender, args) =>
{
HtmlPage.Window.Alert("completed.");
};
myServiceClient.GetSomeDataAsync();
这样写是没有问题的。
但是有的朋友可能为了提高代码共用程度,而把 myServiceClient 这个 WCF 的客户端代理对象作为类的字段来定义,以便在多次调用中共享。比如这篇教程中所说的:
“这一步比较复杂,这里分小点讨论。为了调用WCF服务,先定义一下全局变量。
AcademeServiceClient academeSClient;
”
这样做有什么问题呢?
假设我们上面的代码是在一个按钮的点击事件处理函数里定义的,那么,就会导致每点击一次按钮就注册一次 GetSomeDataCompleted 的事件处理函数。最后你会发现点一次按钮,会重复多次执行回调函数。
所以还是不要共用 client 代理了,每次调用之前创建一个比较好。
因为今天遇到了这个错误,在这里提醒一下大家。
由于 Silverlight 中只支持异步方式的 WCF 调用,所以代码一般是这样子的:
var myServiceClient = new MyServiceClient();
myServiceClient.GetSomeDataCompleted += (sender, args) =>
{
HtmlPage.Window.Alert("completed.");
};
myServiceClient.GetSomeDataAsync();
这样写是没有问题的。
但是有的朋友可能为了提高代码共用程度,而把 myServiceClient 这个 WCF 的客户端代理对象作为类的字段来定义,以便在多次调用中共享。比如这篇教程中所说的:
“这一步比较复杂,这里分小点讨论。为了调用WCF服务,先定义一下全局变量。
AcademeServiceClient academeSClient;
”
这样做有什么问题呢?
假设我们上面的代码是在一个按钮的点击事件处理函数里定义的,那么,就会导致每点击一次按钮就注册一次 GetSomeDataCompleted 的事件处理函数。最后你会发现点一次按钮,会重复多次执行回调函数。
所以还是不要共用 client 代理了,每次调用之前创建一个比较好。
因为今天遇到了这个错误,在这里提醒一下大家。
相关文章推荐
- [Silverlight] 一个易犯的错误:关于调用 WCF 服务
- 一个关于WCF调用远程链接返回405错误不允许使用此方法的问题
- C# sliverlight调用WCF服务出现的一个错误
- WCF分布式开发常见错误(3):客户端调用服务出错:You have tried to create a channel to a service that does not support .Net Framing
- Silverlight同步(Synchronous)调用WCF服务
- Silverlight同步(Synchronous)调用WCF服务
- WCF并发(Concurrency)的本质:同一个服务实例上下文(InstanceContext)同时处理多个服务调用请求(转)
- 创建一个简单的WCF程序2——手动开启/关闭WCF服务与动态调用WCF地址
- 解决android调用IIS Express中的WCF服务时,出现错误400问题
- 如何在调用WCF服务之前弹出一个确认框?
- 关于WCF的“调用方未由服务进行身份验证”的另一解决方法
- 在SilverLight中同步调用调用wcf服务
- silverlight中调用wcf服务
- Silverlight 调用WCF常见错误
- 关于初学WCF时,调用方未由服务进行身份验证的问题
- 稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密
- 一个通过JSONP跨域调用WCF REST服务的例子(以jQuery为例)
- 一步一个脚印学习WCF之一WCF概要(中)之客户端与服务-WCF服务的创建与调用Demo
- 【转载】一个通过JSONP跨域调用WCF REST服务的例子(以jQuery为例)
- Silverlight 调用WCF 远程服务器返回了错误: NotFound