WCF

  1. 契约

  契约

    服务契约

[ServiceContract(Name="HelloWorld",Namespace="http://oec2003.cnblogs.com"]
public interface IHelloWorldService
{ 
}

    数据契约

      DataContractAttribute

特性有IsReference、Name和Namespace三个属性:

IsReference: bool类型,表示在进行序列化的时候是否保持对象现有的引用结构。

Name:名称。

Namespace:命名空间。

DataMemberAttribute

特性有如下四个属性:

EmitDefaultValue:表明在数据成员的值等于默认值的情况下,是否还须要将其序列化到最终的XML中,默认值为true,表示默认值会参与序列化。

IsRequired:bool类型,表明属性成员是否是必须的成员,默认值为false。

Name:数据成员的别名。

Order:相应的数据成员在最终序列化的XML中出现的位置,默认是按字母顺序排列的。

[DataContract(IsReference=true,Name="MyUser",Namespace="http://oec2003.cnblogs.com")]
public class User
{
    [DataMember]
    public int Age { get; set; }
    [DataMember(Name = "UserName", IsRequired = true, Order = 1)]
    public string Name { get; set; }
    [DataMember]
    public string Email { get; set; }
}

    消息契约

      MessageContractAttribute

通过在一个类型上使用MessageContractAttribute标记可以使之成为一个消息契约。MessageContractAttribute特性含有如下几个属性:

IsWrapped:是否为定义的主体成员(一个或者多个)添加一个额外的根节点。

WrapperName:根节点的名称。

WrapperNamespace:根节点的命名空间。

ProtectionLevel:表示保护级别,WCF中通过System.Net.Security.ProtectionLevel枚举定义消息的保护级别。一般有3种可选的保护级别:None、Sign和EncryptAndSign。

      MessageHeaderAttribute

使用MessageHeaderAttribute标记的数据成员将会出现在SOAP消息的头部,该特性包含下面几个属性:

Actor:为一个URI值,表示处理该报头的目标节点。

MustUnderstand:bool类型,表明Actor定义的节点是否必须理解并处理该节点。

Name:名称。

Namespace:命名空间。

ProtectionLevel:表示保护级别。

Relay:表明该报头是否需要传递到下一个SOAP节点。

      MessageBodyMemberAttribute

使用MessageHeaderAttribute标记的数据成员将会出现在SOAP消息的主体部分,该特性包含下面的属性:

Order:Order属性用来控制成员在SOAP主体部分中出现的位置,默认按字母顺序排列。

Name:名称。

Namespace:命名空间。

ProtectionLevel:表示保护级别

[MessageContract(IsWrapped=false,WrapperName="MyMessage",WrapperNamespace="http://oec2003.com")]
public class MessageTest
{
    [MessageHeader(Actor="http://oec2003.com/Age",MustUnderstand=true,Name="MyAge",
        Namespace="http://oec2003.com",Relay=true)]
    public int Age { get; set; }
    [MessageHeader]
    public string Name { get; set; }
    [MessageBodyMember(Order = 1)]
    public string Email { get; set; }
}
<system.serviceModel>
    <services>
      <service name="WCFConsole.User" behaviorConfiguration="TestBehacior">
        <!--宿主-->
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/User" />
          </baseAddresses>
        </host>
        <!--ABC-->
        <endpoint address="" binding="basicHttpBinding" contract="WCFDemo.IUser" >
        </endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="TestBehacior">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
原文地址:https://www.cnblogs.com/Jacob-Wu/p/9392688.html