數據契約(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.pswp.cn/news/276039.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276039.shtml
英文地址,請注明出處:http://en.pswp.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…