我是不是必须使用 WCF 对 silverlight 应用程序中的对象进行序列化/反序列化?

Posted

技术标签:

【中文标题】我是不是必须使用 WCF 对 silverlight 应用程序中的对象进行序列化/反序列化?【英文标题】:Do I have to serialize/deserialize the object in silverlight application with WCF?我是否必须使用 WCF 对 silverlight 应用程序中的对象进行序列化/反序列化? 【发布时间】:2017-06-21 00:11:18 【问题描述】:

我想在 Silverlight 中创建和使用 WCF 服务。我创建了一个从数据库返回此模型的服务:

namespace SilverlightWithWCFService.Web

    [DataContract]
    public class Customer
    
        [DataMember]
        public string CustomerName  get; set; 
        [DataMember]
        public string CompanyName  get; set; 
        [DataMember]
        public string ContactName  get; set; 
    

服务如下所示:

namespace SilverlightWithWCFService.Web

    [ServiceContract(Namespace = "")]
    [AspNetCompatibilityRequirements(RequirementsMode =  AspNetCompatibilityRequirementsMode.Allowed)]
    public class SampleService
    

        [OperationContract]
        public List<Customer> CustomerList()
        
            var custList = new List<Customer>();

            // populate custList

            return custList;
            
        
    

在我的 Silverlight 应用程序中,我添加了一个服务参考。该方法调用服务操作:

 public Page()
 
    InitializeComponent();
    SampleServiceClient client = new SampleServiceClient();
    client.CustomerListCompleted += new EventHandler<CustomerListCompletedEventArgs>(client_CustomerListCompleted);
    client.CustomerListAsync();
  

 void client_CustomerListCompleted(object sender, CustomerListCompletedEventArgs e)
 
     CustomerGrid.ItemsSource = e.Result;
 

所以我的问题是:我不知道 Silverlight 如何与 WCF 一起工作。我是否必须在 WCF 端序列化某些东西并在客户端反序列化返回值?如果是这样,缺少什么代码? (在哪里?)

更新:

我认为基于一些在线questions。我应该在完成的事件代码中反序列化返回的e.Result吗?

【问题讨论】:

“我是否必须在 WCF 端序列化某些内容并在客户端反序列化返回值?” - 不需要。 “如果是这样,缺少什么代码?(在哪里?)” - 在您的问题中,缺少问题陈述。 @CodeCaster,感谢编辑。 不客气。您现在可以添加您遇到的实际问题吗? 【参考方案1】:

我是否必须在 WCF 端序列化某些内容并在客户端反序列化返回值?

不,当您使用网络服务时,底层代码将为您完成所有这些工作。

不要因为 Silverlight 而挂断电话。只需将 Silverlight 视为控制台应用程序。无论您必须在控制台应用程序中做什么来使用 Web 服务,都必须在 Silverlight 中执行。唯一的区别是您需要以异步方式处理调用,但这与您的问题相关的 Web 服务的使用是分开的。


请注意,有一种竞争技术可以在编译期间完成 Web 服务的所有更新。这就是所谓的 RIA 服务,这是一种完全不同的动物。

我建议您使用 WCF Web 服务,但为您更新发送/接收缓冲区的大小将在任何真正的数据传输中轻松最大化这些缓冲区。

【讨论】:

但它是一个网络应用程序。数据通过网络传输。 @Bigeyes 如果您显示的代码有问题,请解释您的问题。您不需要使用 WCF 手动反序列化,这就是 WCF 的强大功能。无论您是在控制台应用程序、Web 应用程序还是 Silverligt 中使用 WCF,都没有关系。 我更新了课程。假设我的班级中有 `[DataContract] 和 [DataMember]`。这意味着我必须使用 DataContractSerializer? @Bigeyes 您能否停止在 cmets 中向回答您问题的人发送不相关的问题,并编辑您的问题以提出您真正想要回答的问题? @Bigeyes 将您的操作提炼到测试控制台客户端,如果您提到的属性需要专门处理,则需要在 Silverlight 中完成。您提到的属性是 WCF 中的标准操作过程。在解决方案资源管理器中打开 Hidden Files 并检查在使用 Web 服务时创建的隐藏文件。看看它是如何处理这些操作的。

以上是关于我是不是必须使用 WCF 对 silverlight 应用程序中的对象进行序列化/反序列化?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我必须使用 WCF 而不是 Web 服务? [复制]

WCF - 客户端是不是必须具有与端点相同的行为?

如何在C#中的for循环中使用WCF客户端

IIS 是不是进行 SSL 证书检查,还是我必须对其进行验证?

应用程序使用 WCF,如果应用程序中没有更新调用,是不是需要更新它?

为啥 WCF 会返回 myObject[] 而不是 List<T> 像我期望的那样?