数据契约(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>

 

转载于:https://www.cnblogs.com/chenqingwei/archive/2010/06/09/1754513.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276039.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jakob slam_Jakob Nielsen针对用户界面设计的第二种可用性启发法

jakob slamIn the pursuit of providing great user experiences, it’s imperative that digital products are evaluated. A 为了提供出色的用户体验&#xff0c;必须对数字产品进行评估。 一个 heuristic evaluation is essential to delivering great user experiences. I…

微软Office 365正式上架Mac App Store

今天&#xff0c;Office 365正式在Mac App Store上架&#xff0c;Mac用户可以轻松下载Word&#xff0c;Outlook&#xff0c;Excel&#xff0c;PowerPoint&#xff0c;OneNote以及整套微软的热门应用程序。用户还可以从应用程序内订购Office 365。苹果全球开发者关系高级主管Sha…

一文搞懂浏览器原理

大家好&#xff0c;我是若川。最近这几年&#xff0c;云计算的普及和 HTML5 技术的快速发展&#xff0c;越来越多的应用转向了浏览器 / 服务器&#xff08;B/S&#xff09;架构&#xff0c;这种改变让浏览器的重要性与日俱增&#xff0c;视频、音频、游戏几大核心场景也都在逐渐…

python处理excel可视化_python如何将excel数据处理可视化

python将excel数据处理可视化的方法&#xff1a;首先安装xlrd与xlwt库&#xff0c;进行表格读取&#xff1b;然后使用pyecharts生成Echarts图表的类库&#xff1b;最后安装Echarts读取Excel数据及显示即可。python将excel数据处理可视化的方法&#xff1a;Excel表操作python操作…

dataframe中将一列数据切分成多列

为什么80%的码农都做不了架构师&#xff1f;>>> 原sheet中数据 目的 将【备注】列切分成【key】列和【value】列 Python sheet[key] sheet[备注].str.extract(r(_.*(?\u503c))) sheet[value] sheet[备注].str.extract(r((?<).*))结果 参考 pandas.Series.st…

matplotlib可视化_EDA:Geopandas,Matplotlib和Bokeh中的可视化

matplotlib可视化Nowadays, everyone is immersed with plenty of data from news sources, cellphones, laptops, workplaces, and so on. Data conveys with tons of information from different data variables like date, string, numeric, and geographical format. How t…

(转)结婚那天,妈问我:坐在角落里象两个要饭模样的人是谁?

人人看到的文章 很感人~~~~结婚那天&#xff0c;妈问我&#xff1a;坐在角落里象两个要饭模样的人是谁&#xff1f; 我看过去的时候&#xff0c;有个老头正盯着我&#xff0c;旁边还有个老太太&#xff0c;发现我看着他们时赶忙低下头。我不认识他们但也不象要饭的&#xff0c;…

nginx-1.13.x源码安装

Nginx 安装配置【依赖库】[ zlib ]&#xff08;下载&#xff09;http://download.chinaunix.net/download.php?id24013&ResourceID12241 [ pcre ]apt-get install libpcre-dev[ openssl ]&#xff08;下载&#xff09;http://download.chinaunix.net/download.php?id3937…

小技巧!CSS 整块文本溢出省略特性探究

大家好&#xff0c;我是若川。欢迎加我微信 ruochuan12&#xff0c;长期交流学习。今天的文章很有意思&#xff0c;讲一讲整块文本溢出省略打点的一些有意思的细节。点击下方卡片关注我&#xff0c;或者查看源码系列文章。文本超长打点我们都知道&#xff0c;到今天&#xff08…

linux配置ip地址 suse_SUSE Linux下设置IP的两种方法

第一种SUSE Linux IP设置方法ifconfig eth0 192.168.1.22 netmask 255.255.255.0 uproute add default gw 192.168.1.2释义&#xff1a;#IP配置&#xff0c;包括子网掩码,看情况修改eth0和192.168.1.22#网关修改 ,看情况修改192.168.1.2第二种SUSE Linux IP设置方法在suse操作系…

寒假作业3:抓老鼠啊

7-1 抓老鼠啊~亏了还是赚了&#xff1f; &#xff08;20 分&#xff09; 某地老鼠成灾&#xff0c;现悬赏抓老鼠&#xff0c;每抓到一只奖励10元&#xff0c;于是开始跟老鼠斗智斗勇&#xff1a;每天在墙角可选择以下三个操作&#xff1a;放置一个带有一块奶酪的捕鼠夹(T)&…

笔记本移交_创建完美的设计移交

笔记本移交重点 (Top highlight)Design specifications (specs) are guidelines that developers will use to implement a design. Think of an architect providing building blueprints to the construction team. Many designers think of specs as mindless zombie work. …

大手笔,送¥1599的Apple AirPods Pro和独家礼物等

大家好&#xff0c;我是若川。为感谢公众号读者们长久以来的支持&#xff0c;本次我联合几位前端界大佬给大家送超级福利了。除了联合福利之外&#xff0c;每位前端大佬还带了专属礼品送给大家&#xff0c;所有抽奖均可重复参与、可重复中奖&#xff0c;详情见下文每个公众号的…

jQuery1.4新特性

1. 传参给 jQuery(…) 之前&#xff0c;jQuery可以通过 attr 方法设置元素的属性&#xff0c;既可传属性的名和值&#xff0c;也可以是包含几组特定 属性名值对 的 对象。在 jQuery 1.4 中&#xff0c;你可以把一个参数对象作为第二个参数传给 jQuery 函数本身&#xff0c;同时…

python pack unpack_golang 仿python pack/unpack

package includesimport ("bytes""encoding/binary""fmt"_"os""strconv""strings")type Protocolstruct{Format []string}//封包func (p *Protocol) Pack(args ...interface{}) []byte{la :len(args)ls :len(p.Fo…

JavaScript递归应用与实践

递归简单来说就是函数内调用自生的一种方法&#xff0c;形如&#xff1a; function foo(){foo() } 复制代码下面我列举一些常用的递归应用。 1. 求和&#xff0c;例如求1234...100之和 分析如下&#xff1a; sum(100)sum(99)100 sum(99)sum(98)99 ... sum(1)sum(0)1 复制代码代…

一个好的设计师_是什么让一个好的设计师

一个好的设计师重点 (Top highlight)The design manager role has grown considerably over the past five years. As design has been recognised as a business value-driver and organisations have increased their design maturity, we’ve seen lots more design managem…

PHP-Redis扩展安装 error: ext/standard/php_smart_str.h: No such file or directory

在源码编译PHP-redis扩展时&#xff0c;遇到缺少头文件问题【问题描述】error: ext/standard/php_smart_str.h: No such file or directory 【问题原因】PHP安装好的头文件目录&#xff1a;/php/include/php/ext/standard/&#xff0c;这些头文件&#xff0c;在php7之前的版本&…

相见恨晚的一款前端布局神器!

大家好&#xff0c;我是若川。欢迎加我微信 ruochuan12&#xff0c;长期交流学习。今天给大家推荐一款非常实用的前端页面布局神器&#xff0c;点击下方卡片关注我&#xff0c;或者查看源码系列文章。页面和布局是一门前端程序员的必修课&#xff0c;css 从来也不是停留在面试八…

IC设计前端几本经典书籍

No.1 Writing Testbenches, Functional Verification of HDL Modelsby Janick Bergeron本书主要以HDL&#xff08;verilog/vhdl&#xff09;为例&#xff0c;详细讲述了在IC DESIGN FLOW中Verification 以及Test的设计思想、方法和技巧&#xff0c;涵概了测试的各个方面&#x…