• WCF数据协定


    今天还是按部就班的开始在MSDN里面翻找WCF的资料。先从定义开始吧。

    看着下面这些代码,我貌似发现一个东西,那就是带有[DataMember]标签的方法都是可以给客户端开放使用的,不带有的客户端就不给用,好像就是这样的。

    [DataContract(Namespace="http://Microsoft.ServiceModel.Samples")]
    internal class Record
    {
    private double n1;
    private double n2;
    private string operation;
    private double result;

    internal Record(double n1, double n2, string operation, double result)
    {
    this.n1 = n1;
    this.n2 = n2;
    this.operation = operation;
    this.result = result;
    }

    [DataMember]
    internal double OperandNumberOne
    {
    get { return n1; }
    set { n1 = value; }
    }

    [DataMember]
    internal double OperandNumberTwo
    {
    get { return n2; }
    set { n2 = value; }
    }

    [DataMember]
    internal string Operation
    {
    get { return operation; }
    set { operation = value; }
    }

    [DataMember]
    internal double Result
    {
    get { return result; }
    set { result = value; }
    }

    public override string ToString()
    {
    return string.Format("Record: {0} {1} {2} = {3}", n1, operation, n2, result);
    }
    }

    在辗转反侧的时候,看到一个使用不同的编写器来影响XML的编码。这个技术貌似就是接下来我需要的东西。通过把文本格式写成二进制可以大量减少长度,增加传输时候的稳定性。

    1 //声明一个内存流对象
    2  MemoryStream stream2 = new MemoryStream();
    3  //使用一个二进制的编写器来影响XML的编码流
    4 XmlDictionaryWriter binaryDictionaryWriter = XmlDictionaryWriter.CreateBinaryWriter(stream2);
    5 //在序列化对象中通过使用二进制编写器来装载一个数据实例
    6 serializer.WriteObject(binaryDictionaryWriter, record1);
    7 binaryDictionaryWriter.Flush();
    8
    9 //流的长度比较
    10 Console.WriteLine("Text Stream is {0} bytes long", stream1.Length);
    11 Console.WriteLine("Binary Stream is {0} bytes long", stream2.Length);

    数据的派生也是可以在这里运用的,不过代码看着怪累的。好了。我贴好这断休息一下了。

    1 //继承了父类的构造函数并且增添了新的一个数据
    2 //但是语言是不是不严谨,太随意了。
    3 [DataContract(Namespace="http://Microsoft.ServiceModel.Samples")]
    4 public class ComplexNumberWithMagnitude : ComplexNumber
    5 {
    6 public ComplexNumberWithMagnitude(double real, double imaginary) : base(real, imaginary) { }
    7
    8 [DataMember]
    9 public double Magnitude
    10 {
    11 get { return Math.Sqrt(Imaginary*Imaginary + Real*Real); }
    12 set { throw new NotImplementedException(); }
    13 }
    14 }

    好了。我得休息一下了。脑袋发涨了。

    注意:所有的代码都是来自MSDN。

  • 相关阅读:
    cefsharp设置默认语言
    C#创建委托实例
    C++/C#互调步骤
    mybatis别名
    redis
    数据库优化方面的事情:
    Properties类使用详解
    七层协议以及如何很好得记忆
    Http 请求到后端过程
    【转】那些年用过的Redis集群架构(含面试解析)
  • 原文地址:https://www.cnblogs.com/snakevash/p/2034336.html
Copyright © 2020-2023  润新知