• 数据契约(DataContract)


    WCF第一要素就是契约:

    服务契约用于声明可用于远程访问的类型。在Interfaceclass开始处使用服务契约标签.

    [ServiceContract]

    Public interface Iservice

    {

    }

    接口调用契约的好处:

    1.       同一服务类型可以实现多个不相干的服务契约.

    2.       有利于版本升级

    3.       按照接口隔离原则,让开发人员可以随时修改服务契约.

    服务契约的属性与作用:

    Name/Namespace定义该服务契约的自定义名称和命名空间,它会反映到WSDL及客户端的导出类中

    ConfigurationName设置信息在配置文件中的名称。默认情况下为类的全名(本例为“WCFDemo.IService”)。

    SessionMode服务契约的会话方式,允许的值有AllowedNotAllowedRequired。默认为Allowed值。

    CallbackContract设置双工通信时(Duplex)的回调类型。

    ProtectionLevel指定消息保护模式,可以对通信的消息进行加密及签名。

    使用参数时,例如要指定自定义的Name Namespace,可以编写如下的代码。

    [ServiceContract(Name=”MyService”,Namespace=”http://microsoft.com/wcf/demo”)]

    Interface IService{}

    定义为服务契约的接口或类的方法可以被声明为OperationContract(操作契约),只有声明为操 作契约的方法才可以被远程调用

    [ServiceContract]

    Public interface Iservice

    {

           [OperationContract]

           String SayHello(string name);

    }

    错误契约(FaultContract)

    被标识为FaultContract的方法必须同时已经被声明为OperationContract,否则就没有什么意义。声明一个方法为 FaultContract并指定了响应的类型参数以后,当调用这个方法时产生错误时,就会有一个对应SOAP格式的错误消息返回给调用端

    [DataContract]

    public class UserFault //自定义错误类

    {

            [DataMember]

            public string Message { get; set; }

            [DataMember]

            public int UserId { get; set; }

            public UserFault(int userId, string msg)

            {

                this.UserId = userId;

                this.Message = msg;

            }

    }

      [ServiceContract]

      public interface IUserService

      {

            [OperationContract]

            [FaultContract(typeof(UserFault))]

            UserInfo GetUser(int id);

      }

      public UserInfo GetUser(int id)

      {

         try{

                UserInfo info = new UserInfo();

                info.Age = 16;

                info.UserName = "陈翔";

                return info;

            }

            catch (Exception e)

            {

                throw new FaultException<UserFault>(new UserFault(id, e.Message));

            }

      }

    数据契约(DataContract)

    [DataContract]

           public partial class Userinfo

           {    

                  private string _xsid = String.Empty;

                 

                  /// <summary>

                  /// 学生编号

                  /// </summary>

                  [DataMember(Name="xsid")]

                  public string Xsid

                  {

                         get { return _xsid; }

                         set { _xsid = value; }

                  }

           }

    服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型。

    一个类如果声明了DataContract类型,说明类是可以被传送的,且只有成员属性可以被传送.支持Name/Namespace属性[DataContract(Name=”Name”)]

    每一个要传送的成员声明为DataMember类型,同样也可以包含Name,Namespace,IsRequired,Order,EmitDefaultvalue属性

    需要传送SOAP消息时可以使用[MessageContract] eg:

    [MessageContract]

           public partial class Userinfo

           {    

                  private string _xsid = String.Empty;

                  private string _njid = String.Empty;

                  /// <summary>

                  /// 学生编号

                  /// </summary>

                  [MessageBodyMember(

    Name="xsid"

    Namespace=”http://www.smodi.com”)]

                  public string Xsid

                  {

                         get { return _xsid; }

                         set { _xsid = value; }

                  }

                 

                  /// <summary>

                  /// 年级编号

                  /// </summary>

                  [MessageHeader(

    Name="njid"

    Namespace=”http://www.smodi.com”)]

                  public string Njid

                  {

                         get { return _njid; }

                         set { _njid = value; }

                  }

           }

    这个可以生成SOAP消息

    <s:Envelope>

        <s:Header>

            <a:Action s:mustUnderstand="1">http:// Userinfo /Action</a:Action>

            <h:AuthKey s:mustUnderstand="1" xmlns:h="http://www.smodi.com">xxxx</h:AuthKey>

        </s:Header>

        <s:Body>

            <UserMessage xmlns="Microsoft.WCF.Documentation">

                 <User xmlns="http://www.smodi.com">abcd</User>

           </UserMessage>

        </s:Body>   

    </s:Envelope>

  • 相关阅读:
    hdu 1232 最小生成树
    hdu 1260 dp
    hdu 1385 最短路径按字典数输出
    hdu 1541 树状数组
    hdu 1544 求字符串回文
    hdu 1728
    hdu 1754 树状数组求最大值
    hdu 1892 二维树状数组
    hdu 2082 母函数
    循环
  • 原文地址:https://www.cnblogs.com/chenqingwei/p/1754513.html
Copyright © 2020-2023  润新知