silverlight   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用Silverlight的Wcf服务的最佳实践?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

你将如何构建在silverlight应用程序中调用wcf服务的代码? 只使用一次实例化的wcf服务代理(又名单身)并在整个SL应用程序中使用它? 如果是这样,你是如何解决ws-call-completed事件的取消订阅控件的? 要么 为每个ws调用创建wcf服务代理?你在哪里关闭代理呢? 这是我发现可行的应用程序结构: >应用程序分为模块(Prism但可以是任何东西) – 每个垂直功能的模块. >
你将如何构建在silverlight应用程序中调用wcf服务的代码

只使用一次实例化的wcf服务代理(又名单身)并在整个SL应用程序中使用它?
如果是这样,你是如何解决ws-call-completed事件的取消订阅控件的?

要么

为每个ws调用创建wcf服务代理?你在哪里关闭代理呢?

解决方法

这是我发现可行的应用程序结构:

>应用程序分为模块(Prism但可以是任何东西) – 每个垂直功能的模块.
>每个模块都有自己的一组服务客户端类(由slsvcutil生成)
>对于每个服务客户端部分类,我有一个生成的部分类,其中每个服务方法我都有一个返回IObservable的版本.

例如.如果我的服务客户端有方法GetAllMyDataAsync()和事件GetAllMyDataCompleted,则生成方法签名将是IObservable< MyDataDto []> GetMyData()此方法将处理订阅/取消订阅事件,身份验证,错误处理和其他基础结构问题.

这样,Web服务调用变得简单:

new MyserviceClient().GetAllMyData().订阅(DoSomethingWithAllMyData)

有了这个,我可以轻松地从多个请求中加入数据,例如(严格用于演示目的,请勿在真实应用中尝试此操作):

var des = (from d in new MyserviceClient().GetMyDataItem()
           from e in new MyserviceClient().GetDataItemEnrichment(d)  
           SELEct new EnrichedData { Data = d,Enrichment = E});  
des.Subscribe(DoSomethingWithEnrichedData);

>一旦应用程序变得更加复杂(例如,数据由多个组件共享,您添加动态更新最初检索数据的消息传递等),在堆栈中添加一个元素是有用的 – 模型.

因此,如果我有一个服务MyDataservice,我会有一个名为MyDataserviceModel的模型类.它将作为单例注册在容器中,并将注入需要它的视图模型中.因此,当viewmodels需要数据时,它会与这个类进行对话(因此,@L_933_0@myserviceClient.GetAllMyData时,它会@L_933_0@myDataserviceModel.GetAllMyData.

这种方式viewmodels完全独立于WCF堆栈(更容易模拟,更容易测试)另外这些模型类负责:

>从/到DTO的数据转换>丰富和组合数据(一种模型方法可以连接来自多个请求的数据)>处理问题,如限制(例如典型场景,用户在组合框中选择的东西,它导致请求被发送到服务器以检索该选择的数据,而该请求被执行用户进行了另一次更改,但由于某种原因响应失灵)等>将通过WCF初始加载时提取的数据与服务在会话期间推送的数据相结合

大佬总结

以上是大佬教程为你收集整理的使用Silverlight的Wcf服务的最佳实践?全部内容,希望文章能够帮你解决使用Silverlight的Wcf服务的最佳实践?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。