• 自学WCF理论知识


       1.理论知识       

         WCF中,契约可分为

          1.1 用于定义服务操作的服务WCF契约:Service Contract

            这种级别的契约又包括两种:ServiceContract和OperationContract

             ServiceContract用于类或者结构上,用于WCF此类或者结构能被远程调用

             OperationContract 用于类中的方法(Method)上,用于指示WCF该方法可被远程调用。

          1.11  ServiceContract属性值可以设置

            Name:给契约定义一个名称,而不是使用接口或是类的类型名,在客户端添加服务引用时用到

            Namespace:命名空间

            CallbackContract:将另一个服务契约定义为回调契约,使得客服端可以接收服务端的异步消息。

            ProtectionLevel:控制契约中发送消息的保护模式是否需要被签名和加密。该属性为System.Net.Security.ProtectionLevel枚举类型。

            SessioMode:确定会话是否为公开服务契约的端点所支持。

          1.12  ConfigurationName:服务的配置名称。

            OperationContract属性值设置 

           Name:定义一个操作名称,而不是使用方法名称、

           Action:该操作消息的动作标题

           ReplyAction:响应该操作消息的动作标题

           IsOneWay:设置该操作是否单向和没有回复,如果操作是单向的,将不支持ReplyAction。

            ProtectionLevel:允许你控制特定的操作消息是否被保护,操作中的ProtectionLevel属性将覆盖服务契约中的ProtectionLevel。该属性为System.Net.Security.ProtectionLevel枚举类型。

            IsInitiating:操作是否可以用来初始化会话。

             IsTerminating:操作是否中止一个会话。

              AsyncPattern:将服务操作定义为异步实现模式。

          1.2 用于自定义结构的数据Wcf契约:Data Contract 

           数据契约也可分为两种:DataContract和DataMember用于类或者结构上,指示 WCF此类或者结构能够被序列化并传输,而DataMember只能用在类或者结构的属性(Property)或者字段(Field)上,指示WCF该属性或者字段能够被序列化传输。

          使用数据契约必须引用System.Runtime.Serialization命名空间,在类型上使用DataContractAttribute可以创建数据契约,类型中的成员使用DataMember标记。代码如下:

          

             1.21 DataContract属性值

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

               Name:名称。

               Namespace:命名空间。

             1.22 DataMember

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

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

              Name:数据成员的别名。

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

         1.3 用于自定义错误异常的WCF契约:Fault Contract

         FaultContract用于自定义错误异常的处理方式,默认情况下,当服务端抛出异常的时候,客户端能接收到异常信息的描述,但这些描述往往格式统一,有时比较难以从中获取有用的信息,此时,我们可以自定义异常消息的格式,将我们关心的消息放到错误消息中传递给客户端,此时需要在方法上添加自定义一个错误消息的类,然后在要处理异常的函数上加上FaultContract,并将异常信息指示返回为自定义格式。

    IService1.cs中代码:

    [OperationContract]  //定义为操作契约
            [FaultContract(typeof(Exception))]   //定义为错误契约
            int sum(int i,int j);

     Service1.svc中代码:

    //实现接口层中写入的方法签名
            public int sum(int i, int j)
            {
                if (j == 0)
                {
                    Exception er = new Exception();
                    throw new FaultException<Exception>(er, "除数不能为0"); 
                }
                else
                {
                    return i / j;
                }
            }

     Web应用程序中的代码:

     protected void Page_Load(object sender, EventArgs e)
            {
                try
                {
                    Service1Client Server1 = new Service1Client();                
                    Response.Write(Server1.sum(0,0));  //这里设置的为能引发异常的参数
                }
                catch (Exception ex)
                { 
                   Response.Write(ex.Message);  //输出异常信息,输出“除数不能为零”
                }
            }
    

         1.4用于控制消息格式的消息WCF契约:Message Contract 

      简单的说,它能自定义消息格式,包括消息头,消息体,还能指示是否对消息内容进行加密和签名。

         使用消息契约必须引用System.ServiceModel命名空间,消息契约和数据契约一样都是定义在数据类型上。和数据契约不同的是消息契约更多的是关注数据成员在SOAP消息中的表示。定义一个消息契约需要用到MessageContract特性,另外还涉及到MessageHeader和MessageBodyMember这两个特性,MessageContractAttribute特性标记在类型上,MessageHeader和MessageBodyMember特性标记在数据成员上。

          

             2.host  app.config 的简单配置多个调用

         

  • 相关阅读:
    /proc/uptime详解
    UE没法远程修改文件
    ssh隐藏的sftp功能的使用
    ftp配置文件
    如何判断网线是否连接
    NTP多种模式的配置
    系统开机启动过程
    window BIOS设置硬盘启动模式
    shell加密
    /etc/sysconfig/network-scripts/下文件介绍
  • 原文地址:https://www.cnblogs.com/383855647chenyu/p/5278884.html
Copyright © 2020-2023  润新知