none
SL结合WCF使用时的一个小小困惑。 RRS feed

  • 常规讨论

  • 假设有WCF服务端如下;

    Code Snippet

    //Contract部份

    [ServiceContract]
    public interface IAccountService
    {
    [OperationContract]
    UserInfo GetUserInfo();
    }

    [DataContract]
    public class UserInfo{...}

      //服务实现部份(略)

    public class AccountService : IAccountService

    {..}



    如果我在SL中引用此服务,将自动生成客户端代理,并自动生成UserInfo这个类。

    问题来了,我是否能用我在SL项目中已定义的UserInfoInSL这个类,来代替自动生成的UserInfo类呢?
    当然,这两个类的字段定义是完全一模一样的(它们也只包括字段定义)。

    这个问题的来源是:


    我在SL项目的很多地方使用到了UserInfoInSL这个类,其中有大部份场景并不需要调用WCF服务。
    我当然可以不必多此一举另外定义一个,而在各处直接使用自动生成的UserInfo。
    但很明显这种做法对于项目整体架构来说并不合适 -- 因为我必须到处引用这个自动生成的服务代理。

    我现在的解决办法是:

    每次调用,先从WCF代理处获取到UserInfo实例,然后再手工转换成UserInfoInSL。相当笨拙。
    • 已更改类型 天使坠Moderator 2011年7月12日 2:48 这个值得讨论一下。一直也没好的设计方法
    2008年9月8日 19:55

全部回复

  • 这个可能还是一个比较合理的方法吧!因为代理类和你的界面显示类是有区别的
    努力!完成了js解析器,还差一个svg插件,一个绘图程序,做好自己,呵呵~!
    2011年7月12日 2:48
    版主
  • 同意斑竹说的,当前情况下确实没有好的办法,但是其实有另外的解决方案的。

    比如:你在服务器端只暴露一个方法这个方法是获取到实体集UserInfo的Json数据,然后再客户端的时候反序列化Json数据为UserInfoInSL的集合即可。这样避免暴露过多的方法在Silverlight端,而且也避免你手工转换为UserInfoInSL的麻烦

    2011年7月20日 3:32