【问题标题】:Understanding WCF Client to Server了解 WCF 客户端到服务器
【发布时间】:2012-12-20 18:53:00
【问题描述】:

我很难完全掌握 Windows Communication Foundation 的特定功能。我一个接一个地阅读教程,一本书又一本书。所以我对整个概念性质充满信心。

一部分除外;这是几乎像魔术一样的部分。这实际上使学习有点困难。

我将使用网络上最常见的示例。

我将从DataContract开始:

[DataContract]
public class Customer
{

    // Declerations:
    private Guid id;
    private string firstName;
    private string lastName;
    private string emailAddress;

    [DataMembers]
    public Guid Id
    {
       get { return id; }
       set { id = value; }
    }

    [DataMember]
    public string FirstName
    {
         get { return firstName; }
         set { firstName = value; }
    }

    [DataMember]
    public string LastName
    {
         get { return lastName; }
         set { lastName = value; }
    }

    [DataMember]
    public string EmailAddress
    {
         get { return emailAddress; }
         set { emailAddress = value; }
    }

}

现在我已经创建了一个对象;我想暴露给我的客户。

然后我创建我的ServiceContract

[ServiceContract]
public interface ICustomer
{

     [OperationContract]
     Customer AddCustomer(Customer info);

}

所以这就是我一直困惑自己的地方;假设您有一个客户端应用程序。您已使用该服务。您在单独的程序集/命名空间中有三个文本框。客户提出标准:

  • 名字
  • 姓氏
  • 电子邮件地址

如果您将这些文本框设置为日期;他们将在元数据中转移。但是在服务器上;我怎样才能把那个信息变量拉出来?我只是引用private Guid and private string variables吗?

我看到了一个关于如何将它添加到数据库的教程;但我并不完全理解 WCF 实际在做什么。这与我想要的相似。我想获取客户端接口输入并将其写入数据库和单独的日志文件。

我可以按照教程进行操作;但我想知道如何组装客户对象数据及其变量以供在服务器上使用。

任何帮助都将是惊人的,一些澄清。

对不起,如果我的问题很愚蠢;我不是要开始辩论。只想了解如何提取这些变量并在服务器上使用它们。

提前致谢。如果我没有正确格式化问题,请告诉我。我真的很想了解它在概念上的作用。

更新: 我的真正意图是了解 Client 接口如何引用该对象;所以当调用时服务器有一个不为空的有效对象。

文本框中的客户端类型 ---> 代理发送 ---> 反序列化 ---> 服务 ---> 序列化 ---> 使属性可供使用。

【问题讨论】:

  • 我有点迷失在“如果您将这些文本框设置为日期;它们将在元数据中传输”-您是在问序列化是如何工作的吗?
  • 好吧,如果用户真的填写了这些字段。你如何检索这些值;或获取这些变量。我隐约了解序列化和反序列化,但在所有示例中,它们只是回调变量;你如何操纵用户变量?当编码到您现在只有一个数据协定变量要使用的接口时,序列化只是神奇地出现了?那有意义吗?如果没有,我会相应地思考和编辑问题。
  • 很多平台使用数据绑定来完成这项工作。您将文本框绑定到对象中的字段,然后当用户更改值时,对象中的数据绑定字段会更新。然后,您可以将更新的对象发送回您的服务器以保存它。仅供参考,Visual Studio 从 Web 服务引用创建的代理对象本机支持数据绑定操作。
  • 有点。当您在客户端引用您的服务时,它将为服务公开的类型(例如Customer)构造代理对象。您的 UI 将数据绑定到那些代理对象,这些代理对象必须与服务器上的那些类型兼容(在序列化级别上)。换句话说,您的客户端也将拥有一个具有所有相同属性的 Customer 类型。

标签: c# wcf service


【解决方案1】:

实际的类型,例如您的Customer 类并没有真正通过网络传输。但是,这些类型中的公共信息是通过称为序列化的过程发送的。序列化允许以允许其通过网络传输的方式表示类型。这通常使用 SOAP、JSON 或 XML 等格式来表示。 WCF 甚至允许您准确控制对象的序列化方式,允许您根据需要编写自己的格式化程序。基本上,当调用AddCustomer 时,WCF 会在服务器上构造一个Customer 对象,对其进行序列化,然后通过网络发送这些位。

现在,在客户端上,您将拥有一个匹配的 Customer 对象,称为代理。它可能看起来像:

public class Customer
{
    public Guid Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string EmailAddress { get; set; }
}

基本上,只有服务器版本的数据成员的缩小版本,没有代码或逻辑。在客户端,Customer 的序列化表示被反序列化回此本地代理类的实例,它可用于各种客户端目的,包括绑定到本地 UI 元素。

Web 服务可以使用WSDL(这是一种用于描述 Web 服务契约的 XML 格式)公开此类型信息。 Visual Studio(使用 wsdl.exe 工具)可以自动为您编写这些代理类,让一切变得神奇。

【讨论】:

  • 我喜欢添加“它让一切都神奇地工作”。确实如此;是魔法创造了这篇文章。
【解决方案2】:

我不确定,但可能这就是您正在寻找的 Data Transfer and Serialization

具体可以查看DataContractSerializer

你也可以查看这篇文章:Serialization in Windows Communication Foundation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多