wcf :http://download.csdn.net/detail/bitfan/1378464
http://www.cnblogs.com/yang_sy/archive/2012/03/09/2387597.html
由于该操作需要耗费一定的时间去更新数据库,你将修改其为单向操作,并为ProductsService服务创建一个回调合约,使用该回调合约通知客户端操作的结果。该策略可以使客户端继续运行而不需等待PriceChange操作的执行完成。
4. 在解决方案浏览器窗口,打开ProductsService服务下的IProductsService.cs文件。添加下面的回调合约:
![](https://i-blog.csdnimg.cn/blog_migrate/25c49d288d29a9ab2a7997afaa0f39b4.png)
该回调合约仅仅包含了一个操作OnPriceChanged。你将在后续步骤中更改ProductsService服务中的ChangePrice操作。该操作的目的是通知客户端作为参数所传入的产品的价格已经更改。请注意该操作指定为单向操作;它仅仅通知客户端而且不返回其他任何响应。
5. 修改IProductsServiceV3接口的ServiceContract特性,使其引用第4步定义的回调合约
![](https://i-blog.csdnimg.cn/blog_migrate/f1471a2ad9ab362c2cfebd15e8a331d9.png)
因为CallbackContract属性必须为类型,所以上述代码使用typeof操作返回IProductsServiceV3Callback接口的类型。
6. 在IProductsServiceV3接口中,修改ChangePrice操作的定义并标记该操作为单向操作。单向操作不能有返回值,所以更改返回类型为void
![](https://i-blog.csdnimg.cn/blog_migrate/20758cc990e2026b5ea0f5e237702877.png)
7. 打开ProductsService.cs文件,找到ChangePrice方法。该方法使用新的产品价格更新AdventureWorks数据库,如果更新成功返回true,否则返回false。
更改该方法的返回类型为void。并修改return false或return true为return。
![](https://i-blog.csdnimg.cn/blog_migrate/3cde68bccb4f98bf5437fa9d060e594e.png)