1.最多一个参数和一个返回值,返回值和参数的类型都是消息类型。
下面的代码为定义一个消息契约的实例
[MessageContract]
public class MyMessage
{
private string operation;
private double n1;
private double n2;
private double result;
//Constructor - create an empty message.
public MyMessage() {}
//Constructor - create a message and populate its members.
public MyMessage(double n1, double n2, string operation, double result)
{
this.n1 = n1;
this.n2 = n2;
this.operation = operation;
this.result = result;
}
//Constructor - create a message from another message.
public MyMessage(MyMessage message)
{
this.n1 = message.n1;
this.n2 = message.n2;
this.operation = message.operation;
this.result = message.result;
}
[MessageHeader]
public string Operation
{
get { return operation; }
set { operation = value; }
}
[MessageBodyMember]
public double N1
{
get { return n1; }
set { n1 = value; }
}
[MessageBodyMember]
public double N2
{
get { return n2; }
set { n2 = value; }
}
[MessageBodyMember]
public double Result
{
get { return result; }
set { result = value; }
}
[MessageHeader(MustUnderstand=true)]
public string str;
}
消息契约中使用数组对应的消息格式。
下面例子是消息契约中使用自定义类型:
1.使用数据契约定义一个类型
2.在消息契约把数据契约作为消息契约的一部分(使用MessageHeader或MessageBodyMember)
关于消息加密
1、消息头自己决定自己
2、消息正文部分由最低保护级别,即下面的使用EncrypAndSign.
注意上述主要是针对标头来说的
提高性能的方法:把消息契约的头和身子封装到一个类中,再对类使用消息契约。
改进后
header中的MustUnderstand必须在客户端和服务端一致。