WCF(Ò») Windows Communication Foundation
¸ÅÊö
WCF±»ÍƳöÀ´ºÜ¾ÃÁË£¬µ«ÊǶÔÓÚ¸Õ¸Õ½Ó´¥WCFµÄÈËÃÇÀ´Ëµ£¬Ïë±Ø»áÓÐÒÔÏÂÎÊÌ⣺
WCFÊÇʲô£¿ÎªÊ²Ã´ÎÒÃÇÐèÒªWCF£¿WCFÄܸøÎÒÃÇ´øÀ´Ê²Ã´£¿Ñ§Ï°WCFµÄÄÑÒ×¶ÈÈçºÎ£¿
ÒÔÉÏÕâЩÎÊÌâµÄ´ð°¸ÔÚÍøÉÏÒѾºÜ¶à½éÉÜÁË£¬ÎÒÔڴ˱¾²»±ØÔÙÀË·Ñ¿ÚÉֻ࣬ÊÇ´ó¸ÅÌáһϡ£
WCF: Windows Communication Foundation.´ÓÃû×Ö¿ÉÒÔ¿´³ö£¬ÕâÊÇÒ»ÏîºÍͨÐÅÃÜÇÐÏà¹ØµÄ¼¼Êõ¡£ÎÒÃÇÖªµÀÈí¼þÉè¼Æµ½´¦ÊÇͨÐÅ¡£µ±È»ÎÒÃDZØÐëѧÁËÒԺ󣬲ÅÄܸüºÃµÄÖªµÀËü¡¢ÔËÓÃËü£¬¶ø²»Äܵ¥µ¥´ÓËüµÄÃû×Ö´§²âËüµÄÍþÁ¦ÈçºÎ¡£
WCFÌṩ¸øÁËÎÒÃÇÒ»ÖÖÃæÏò·þÎñ£¨SOA£©µÄ³ÌÐòÉè¼ÆµÄ½â¾ö·½°¸£ººÎÎªÃæÏò·þÎñ£¿Ö®Ç°ÓÐʹÓùý.NET Web
Service ¿ª·¢µÄÅóÓÑ£¬ºÜÈÝÒ×Àí½âÃæÏò·þÎñÊÇÕ¦»ØÊ¡£.Net Web ServiceÒ²ÊǸüÔçµÄʱºò΢ÈíÌá³öµÄÒ»ÖÖÃæÏò·þÎñµÄ½â¾ö·½°¸¡£ÃæÏò·þÎñÊÇÒ»ÖÖ±ê×¼£¬²»Í¬µÄ¹«Ë¾¿ÉÒÔ¸ø³ö¸÷×ÔµÄʵÏÖ¿ò¼Ü¡£µ¥´¿µÄ½²SOA£¬±Ï¾¹Ì«³éÏóÁË¡£Ñ§Ï°Ò»ÏÂSOAµÄÒ»ÖÖʵÏÖ±ÈÈç.Net
Web Service »òWCFÒÔºó£¬ÏàÐŲ»ÓÃÈκÎÎÄ×Ö¶¨Ò壬ÄãÒ²»áÉî¿ÌµØÀí½âSOA¡£ËùÒÔ£¬ºÎÎªÃæÏò·þÎñ£¿ÕâÀï²»½âÊÍ£¬µÈÄãѧһ¶Îʱ¼äµÄWCF£¬Äã×Ô¼º¾ÍÓдð°¸ÁË£¬ÕæµÄ£¬ºÇºÇ¡£
WCFÌṩÁËͳһµÄͨÐÅÄ£ÐÍ£ºÒÔǰÎÒÃÇдͨÐÅ¿ÉÒÔÊÇ£ºTCP/UDP£¬SocketµÈÕâЩ·½Ê½£¬ÔÚWCFÖб»Í³Ò»ÁË¡£ÖÁÓÚÈçºÎͳһ£¿ÕâÀïÏȲ»ËµÁË¡£ËùÒÔ£¬µ±ÄãÔÚÏîÄ¿ÖÐͬʱʹÓÃÁ˶àÖÖͨÐÅ·½Ê½Ê±£¬¿ÉÒÔ¿¼ÂÇʹÓÃWCFÁË¡£
ÒÔǰûÓнӴ¥¹ýWeb Service ¿ª·¢½ÓÊÜWCFÒ²²»ÊÇÄÑÊ£¬ÏàÐÅÎÒ£¡
Õâ´Î£¬ÎÒÃÇÖ»×öÒ»µãWCFµÄ¸ÅÊö£¬¸üΪÏêϸµÄ֪ʶµ½ºóÃæÔÙÂýÂýÕ¹¿ª¡£±ßѧϰ£¬±ß½»Á÷¡£
1. ´ò¿ªVS 2010 -->file-->new Project
,Ñ¡ÔñC#ÏÂÃæµÄWCF£¬Ñ¡ÔñWCF Library¡£ÈçÏÂͼ£º

2.´ËʱÓÐÁËIService ÎļþºÍÒ»¸öService Îļþ¡£ServiceÎļþʵÏÖµÄIServiceÖеÄÁ½¸öº¯Êý£ºGetDataº¯ÊýºÍGetDataUsingDataContractº¯Êý¡£ÖÁÓÚÕâÁ½¸öº¯ÊýÊǸÉÂïµÄ£¿Ïë±Ø²»ÓÃ˵´ó¼Ò¶¼ÄÜ¿´¶®µÄ¡£Ö®ºóÏêϸ˵Ã÷ËûÃǵĽÇÉ«¡£ÕâÀïÒ²²»ÐÞ¸ÄÀàÃûºÍº¯ÊýÃûÁË£¬·½ÃæÆð¼û¡£
3.°´F5ÔËÐгÌÐò£¬´Ëʱ´ò¿ªÁËÒ»¸öWCF µÄÒ»¸ö²âÊÔ ´°¿Ú¡£ÈçÏÂͼ£ºÏȲâÊÔGetDataº¯Êý

²âÊÔ½á¹û£º

ͬÑùµÄ·½·¨²âÊÔGetDataUsingDataContractº¯Êý£º½á¹ûÈçÏÂͼ

4.ÉÏÃæÍê³ÉÁ˶ÔWCFµÄº¯Êý¹¦Äܵļòµ¥²âÊÔ£¬ÄÜ˵Ã÷µÄÊÇServiceÕýÈ·µØÊµÏÖÁËIService¡£½ÓÏÂÀ´ÎÒÃÇÐèÒª½«Õâ¸öWCF²¿Êðµ½Ò»¸öWeb
SiteÖС£
ÔÚ½â¾ö·½°¸ÉÏÃæÓÒ»÷£ºNew -->New Web Site ÈçÏÂͼ£º




ÐÞ¸Äweb siteÏîÄ¿ÖеÄService.svc ÎļþÀïÃæµÄ Service="WcfFirstDemoServiceLib.Service1"
£¨ÆäÖÐÒâ˼¾ÍÊÇÒÑÃüÃû¿Õ¼ä¼ÓÀàÃûµÄ·½Ê½Ö¸¶¨serviceµÄÃû×Ö£©

5.Ìí¼ÓÒ»¸öwinForm³ÌÐò £¬ÓÃËüÀ´µ÷ÓÃWCFµÄº¯Êý¡£

6.¸øwinForm ÏîÄ¿Ìí¼Óweb ÒýÓãº

7.ÔÚForm1ÉÏÃæÌí¼Ó¼¸¸ö¿Ø¼þ£¬È»ºóÔÙÔÚForm1.csÖÐÌí¼ÓÏÂÁм¸ÐдúÂ룺
Form1.cs
8.Ctrl+F5 ÔËÐУº

˵Ã÷:ÕâÀïÖ»ÊǸÅÊöWCF,ËùÒÔÈ«²¿ÔÚʹÓÃWCFµÄĬÈÏÉèÖã¬Ò²Ã»ÓÐÏêϸ˵Ã÷ÿһ²½µÄ×÷ÓÃÊÇʲô¡£Ö»ÊǸø³öÈý¸öÏîÄ¿£ºÏîÄ¿1ÊÇWCFµÄ¿âÒ²ÊÇWCF¹¦ÄܺËÐÄ¡£ÏîÄ¿2ÊÇWCFµÄhostÓÃÓÚÏòÍâ½ç·¢²¼WCFÌṩµÄ½Ó¿Ú£¨×¢£º½Ó¿ÚÕâÀïÖ¸ÌṩÁËÄÄЩº¯Êý¿É±»µ÷Óã©¡£ÏîÄ¿3ÊÇWCFµÄ¿Í»§¶ËÓÃÓÚµ÷ÓÃWCF¡£Æäʵ£¬ÕâÀïÒѾÒþÔ¼ÌåÏÖ³öÒ»µãµã·Ö²¼Ê½Èí¼þ¼Ü¹¹µÄÒâ˼ÁË£ºÓÐרÃÅÌṩ¹¦ÄÜʵÏÖµÄÄ£¿é£¬ÓÐרÃÅÌṩ¶ÔÍ⹫¿ª½Ó¿ÚµÄÄ£¿é£¬ÓÐרÃÅ×÷Ϊµ÷ÓõÄÄ£¿é¡£
ºóÃæÏêϸWCFÿһ²¿·ÖµÄ¡£»¶Ó¹Ø×¢£¡£¡
WCF(¶þ) Contract
ÉÏÆªÖ»ÊǽéÉÜÁËWCFµÄ¸ÅÊö¡£¾ßÌåµÄÉèÖÃÈ«ÊÇʹÓÃĬÈÏ£¬Õ⵱Ȼ²»¿ÉÄÜÂú×ãÎÒÃÇ¿ª·¢µÄÐèÒª¡£Èç¹û×ÐϸÀíÒ»ÀíµÄ»°£¬Äã»á·¢ÏÖWCFÀïÃæµÄÉèÖÃÆäʵ²»Ëã¶àµÄ(ÓëSharePoint±È½ÏµÄ»°)¡£´ÓÕâÆª¿ªÊ¼£¬ÎÒÃÇÒ»µãÒ»µãÀ´Õ¹¿ªÑ§Ï°¡£Õâ´ÎÏÈÌá×î×î³£ÓõÄContract¡£
ContractÓÐÈË·ÒëΪ£ºÐ¶¨,ÆõÔ¼¡£
WCFÖÐÓÐËÄÖÖcontract: ·Ö±ðÊÇ:1.Service Contract. 2.Data Contract.
3. Fault Contract. 4.Message Contract.
»¹ÄÃÉÏÆªÖеÄÀý×Ó(Æäʵ¾ÍÊÇÓÐVisual Studio2010ÌæÎÒÃÇĬÈÏÉú³ÉµÄ´úÂëÁË)˵Ê£º
1.Service Contract¹²·ÖΪÁ½¸ö²¿·Ö£º¶¨Ò岿·ÖºÍʵÏÖ²¿·Ö¡£
[ServiceContract] 2 public interface IService1 3 { 4 [OperationContract] 5 string GetData(int value); 6 7 [OperationContract] 8 CompositeType GetDataUsingDataContract(CompositeType composite); 9 10 } |
ÕâÀïIService¾ÍÊÇÒ»¸öservice contractµÄ¶¨Ò岿·Ö£¬Ö¸¶¨ÁËÄÄЩº¯Êý£¨Operation£©ÏòÍ⹫¿ª£¨¼´£º¿É¹©Clientµ÷Óã©¡£±»[OperationContract]ÐÞÊεĺ¯Êý¿ÉÒÔ±»¿Í»§¶Ë£¨Client£©µ÷Óá£
public class Service1 : IService1 2 { 3 public string GetData(int value) 4 { 5 return string.Format("You entered: {0}", value); 6 } 7 8 public CompositeType GetDataUsingDataContract(CompositeType composite) 9 { 10 if (composite == null) 11 { 12 throw new ArgumentNullException("composite"); 13 } 14 if (composite.BoolValue) 15 { 16 composite.StringValue += "Suffix"; 17 } 18 return composite; 19 } 20 } |
Service1ʵÏÖÁËIService½Ó¿Ú£¬ÊÇService Contract
µÄʵÏÖ²¿·Ö¡£VS×Ô¶¯Éú³ÉµÄ´úÂëÌ«¼òµ¥ÁË£¬²»½âÊÍÁË¡£ÕâÀïΪÁ˾¡¿ÉÄܼòµ¥µØËµÃ÷ÎÊÌâ¡£¾ßÌåÏîÄ¿ÖУ¬Äã¿ÉÄÜÐèÒªÁ¬½ÓÊý¾Ý¿âÔö¡¢É¾¡¢¸Ä¡¢²éÊý¾Ý£¬»ò¶ÔÊý¾Ý°´n¶à¸´ÔÓµÄÒµÎñ¹æÔò½øÐÐÊý¾Ý´¦ÀíÒԺ󣬷µ»Ø¸øclient£¬µÈ¡£
[ServiceContract] Attribute ¿ÉÒÔÓÐÒÔÏÂProperty µÄ:

[OperationContract] Attribute ¿ÉÒÔÓÐÒÔÏÂProperty µÄ:
Action ¶ÔÇëÇóÉèÖÃWS-Addressing µÄaction AsynchPattern Ò첽ģʽ HasProtectionLevel ÏûÏ¢ÊÇ·ñ¼ÓÃÜ£¬Ç©Ãû IsInitiating ±íÃ÷¸Ãº¯Êý±»µ÷ÓÿªÊ¼Ê±ÊÇ·ñÒªÔÚserverÉÏÃæ³õʼ»¯Ò»¸ösession IsOneWay ±íÃ÷º¯Êý±»clientµ÷ÓÃÒÔºó£¬clientÊÇ·ñ»áµÈ´ýº¯Êý·µ»Ø IsTerminating ±íÃ÷¸Ãº¯Êý±»µ÷ÓýáÊøÊ±ÊÇ·ñÒªÔÚserverÉÏÃæ¹Ø±Õsession Name ÉèÖú¯ÊýµÄÃû×Ö£¬ÔÚclient¶Ë¿É¼ûµÄÃû×Ö£¬Ä¬ÈϾÍÊǺ¯ÊýÃû×Ö ProtectionLevel ReplyAction ÉèÖú¯Êý·µ»ØÏûÏ¢µÄSOAP action |
1.1 ÎÒÃÇÐÞ¸ÄÒ»ÏÂServiceµÄĬÈÏÃüÃû¿Õ¼ä,ʹËû¸ümake scene(ÓÐÒâÒå).
´ò¿ªÉÏÆªÖеĽâ¾ö·½°¸WcfFirstDemo.sln
ÓÒ¼üWebHostÏîÄ¿ÏÂÃæµÄÎļþ:Service.svc,ÈçÏÂͼ:

µã»÷Á¬½ÓÈçͼ:

µÃµ½ÈçͼЧ¹û:
ĬÈÏNamespaceÊÇhttp://tempuri.org/
΢Èí¹Ù·½½¨Òé:ÐÞ¸ÄServiceµÄNamespace,ʹÆä°üº¬:¹«Ë¾ÓòÃû+ÏîÄ¿Ãû+°æ±¾ºÅ(Èç:ÈÕÆÚ±íʾ°æ±¾ºÅ)
ÐÞ¸ÄÏîÄ¿:WcfFirstDemoServiceLibÏÂÃæµÄIService.cs´úÂëÈçÏÂ:
[ServiceContract(Namespace="http://wwww.cnblogs.com/WCF/2012/07/28")] 2 public interface IService1 3 { 4 [OperationContract] 5 string GetData(int value); 6 7 [OperationContract] 8 CompositeType GetDataUsingDataContract(CompositeType composite); 9 10 } |
ÓÒ¼üÏîÄ¿WcfFirstDemoServiceLib Ñ¡ÔñÖØÐ±àÒë,³É¹¦ÒÔºó,ÖØÐÂÓÃä¯ÀÀÆ÷´ò¿ªservice.svc,µÃµ½ÈçÏÂͼ:

´ËʱÒѾ¸Ä±äÁËServiceĬÈϵÄNamespaceÁË,client¶ËÐèÒª¸üÐÂÒ»ÏÂ,·ñÔòÔËÐÐclient¶ËÊǻᱨÒì³£µÄ.²Ù×÷ÈçÏÂͼ:

1.2ÐÞ¸ÄServiceµÄName.ĬÈÏÇé¿ö϶¨ÒåserviceµÄ½Ó¿Ú²¿·Ö(Èç±¾Àý:IService)µÄÃû×Ö¾ÍÊÇServiceµÄÃû×Ö.µ«ÓÐʱÐèÒªÈÃclient¿´µ½µÄserviceµÄÃû×Ö¸úserver¶Ë¿´µ½µÄµÄserviceÃû×Ö²»Ò»Ñù.
ÎÒÃÇÏÈ¿´Ò»ÏÂWCFClientÏîÄ¿ÏÂÃæµÄapp.config

ÐÞ¸ÄWcfFirstDemoServiceLibÏîĿϵÄIService.csÎļþ
[ServiceContract(Namespace="http://wwww.cnblogs.com/WCF/2012/07/28",Name="DemoService")] 2 public interface IService1 3 { 4 [OperationContract(Name="GetAge")] 5 string GetData(int value); 6 7 [OperationContract] 8 CompositeType GetDataUsingDataContract(CompositeType composite); 9 10 } |
ÖØÐ±àÒëWcfFirstDemoServiceLibÏîÄ¿.¸üÐÂclient¶Ë¶ÔserviceµÄÒýÓÃ.´ËʱÄã»á·¢ÏÖclient¶Ëapp.configÎļþǰºó·¢ÉúÁ˱仯:

´ËʱWCFClientËùÉú³ÉµÄ´úÀíÀàµÄÃû×ÖÒ²»á±ä»¯,ÄãÐèÒªÐÞ¸ÄWCFClient
DemoService proxy = null; 1 private void Form1_Load(object sender, EventArgs e) 2 { 3 proxy = new DemoServiceClient("BasicHttpBinding_DemoService"); 4 5 } 1 private void btnGetData_Click(object sender, EventArgs e) 2 { 3 this.tbOutputBox.Text = proxy.GetAge(Convert.ToInt32(this.tbInputbox.Text)); 4 } |
×¢:ÉÏÃæ´úÂëÖÐDemoService ¶ÔÓ¦server¶ËIService½Ó¿Ú;DemoServiceClient¶ÔÓ¦server¶ËµÄServiceÀà.
µ±client¶ËµÄapp.configÎļþÖÐÖ»°üº¬Ò»¸öendpointʱ,¿ÉÒÔÖ±½ÓÓÃproxy=new
DemoServiceClient()´«¿Õ²ÎÊý,µ±È»Ò²¿ÉÒÔ´«Õâ¸öendpointµÄname½øÈ¥;µ«Êǵ±app.config°üº¬¶à¸öendpointʱ±ØÐë°ÑendpointµÄname´«½øÈ¥²ÅÄÜnew³öproxy¶ÔÏó.
2.DataContract.
WCFµÄServerºÍclientÖ®¼äÀûÓÃÌØ¶¨¸ñʽµÄMessage(ÏûÏ¢)½øÐÐͨÐŵġ£µ«ÊÇÎÒÃÇʹÓõĸ߼¶ÓïÑÔ£º²»ÂÛÔÚServer¶Ë»¹ÊÇÔÚclient¶Ë£¬ÎÒÃÇ´¦ÀíµÄÒµÎñÊý¾Ý¶¼±»·â×°³ÉÁ˶ÔÏó¡£ËùÒÔÏë°Ñserver¶ËµÄ¶ÔÏó´«Ë͵½client£¨»òÏà·´·½Ïò£©Ê±£¬ÎÒÃDZØÐëÓÐÄÜÁ¦°ÑÕâЩ¶ÔÏóת»»³ÉÌØ¶¨¸ñʽµÄmessage£¬µ½ÁíÒ»¶Ë½ÓÊÕµ½messageºóÔÙ°ÑËüת»Ø³É¶ÔÏó¡£C#µÄ»ù´¡ÀàÐÍ£¨Èçint,string,float,boolµÈ£©¿ÉÒÔ×öµ½ÕâÒ»µã¡£ÒòΪһµ©È·¶¨ÁËServer¶Ë»òclientËùÓõıà³ÌÓïÑÔ£¬¾Í¿ÉÒÔÈ·¶¨ÕâЩ»ù´¡ÀàÐ͵ÄÄÚ´æÕ¼ÓÃÇé¿ö£¨ÀýÈ磺һ¸öServer¶Ë¶¨ÒåµÄint±äÁ¿ÔÚC#ÖÐÕ¼Óöà´óÄÚ´æ¿Õ¼äÊÇÒÑÖªµÄ£¬ÄÇôclient¶Ë¼´±ãʹÓõÄÊÇÆäËûÓïÑÔÒ²ÍêÈ«¿ÉÒÔ¼ÆËã³ö¸Ã±äÁ¿µÄÄÚ´æÕ¼ÓÃÇé¿ö£©¡£¿ÉÊÇÎÒÃÇ×Ô¼º¶¨ÒåµÄÀàÐÍ¿ÉÊÇÎ廨°ËÃÅÁË£¨±ÈÈ磺server¶Ë¶¨ÒåµÄPersonÀànew³öµÄobjectµ½µ×Õ¼Óöà´óÄÚ´æ¿Õ¼ä£¬¾ÍËãServer¶ËÓëclient¶ËʹÓÃͬһÖÖÓïÑÔ£¬Client¶ËÊDz»ÖªµÀµÄPersonÀàµÄ¶ÔÏóµÄÄÚ´æÕ¼ÓÃÇé¿öµÄ¡££©
Óöµ½ÕâÖÖÇë¿îÏ£¬ÎÒÃÇÔõô°ìÄØ£¿Õâʱ¾ÍÂÖµ½[DataContract]Â¶ÃæÁË¡£

ServiceContract×öµÄ¹¤×÷ÊÇÖ¸¶¨serviceÏòclientÌṩÁËÄÄЩº¯Êý¿É¹©µ÷Óá£DataContract×öµÄ¹¤×÷¾ÍÊÇÖ¸¶¨ÔÚServer¶ËÓëclient¶ËÖ®¼ä¿ÉÒÔ´«Ë͵ÄÊý¾Ý¡£[DataContract]µÄ×÷ÓþÍÊÇÖ¸¶¨µ±ÐèÒª´«ËÍij¸öÀࣨÈ磺PersonÀࣩµÄ¶ÔÏóʱ£¬½«¸Ã¶ÔÏóת»¯³ÉΪXML.½ÓÊÜ·½½Óµ½XMLÒÔºó£¬ÔÙ°´Í¬ÑùµÄ·½Ê½»¹Ô³É¶ÔÏó¡£
[DataContract]Attribute ±êÔÚclass¶¨ÒåÉÏÃæÒ»ÐС£[DataMember]Attribute±êÔÚProperty¶¨ÒåÉÏÃæÒ»ÐУ¬field²»ÐèÒªAttributeÐÞÊΡ£
[DataContract] 2 public class CompositeType 3 { 4 bool boolValue = true; 5 string stringValue = "Hello "; 6 7 [DataMember] 8 public bool BoolValue 9 { 10 get { return boolValue; } 11 set { boolValue = value; } 12 } 13 14 [DataMember] 15 public string StringValue 16 { 17 get { return stringValue; } 18 set { stringValue = value; } 19 } 20 } |
[DataContract]Attribute ¿ÉÒÔÏñ[ServiceContract]Ò»ÑùÉèÖÃNameºÍNamespace.
[DataMember] Attribute ¿ÉÒÔÓÐÒÔÏÂÊôÐÔ£º
EmitDefaultValue ÉèÖÃÒ»¸öĬÈÏÖµ IsRequired ½øÐÐÐòÁл¯/·´ÐòÁл¯Ê±¸ÃÖµÒ»¶¨²»¿ÉΪ¿ÕÖµ Name PropertyµÄÃû×Ö Order ÉèÖýøÐÐÐòÁл¯/·´ÐòÁл¯µÄ˳Ðò |
2.1ÐÞ¸ÄDataContractµÄĬÈÏnamespace ,
[DataContract(Namespace = "http://wwww.cnblogs.com/WCF/2012/07/28", Name = "CompositeTypeDemo")] 2 public class CompositeType 3 { 4 bool boolValue = true; 5 string stringValue = "Hello "; 6 7 [DataMember(Name="GetBool")] 8 public bool BoolValue 9 { 10 get { return boolValue; } 11 set { boolValue = value; } 12 } 13 14 [DataMember(Name="GetString")] 15 public string StringValue 16 { 17 get { return stringValue; } 18 set { stringValue = value; } 19 } 20 } |
ÕâÑùÔÚclient¶Ë¿´µ½µÄÀà(class)Ãû,º¯ÊýÃûÓëserver¿´µ½µÄ¾Í²»Ïàͬ.

3.Fault Contract.
ÔÚWCFÖд¦ÀíÒì³£(Exception)µÄ·½·¨ÓÐÐ©ÌØÊâ.ÎÒÃDz»Äܵ¥´Óserver´¦Àíexception,ÐèÒª½øÒ»²½½«Exception´Óserver´«Ë͵½client.
ÔÚºóÃæÎÒÃÇÔÙµ¥¶ÀÌÖÂÛWCFµÄException´¦Àí.
4. Message Contract.
Message ContractÓëData Contract¶¼ÊÇ×÷ÓÃÔÚ´«Ë͵ĶÔÏó(object)ÉÏÃæ.
²»Í¬µÄÊÇ:
datacontractÊǽ«objectÐòÁл¯»¯Îªxml. ʵÏÖobjectµÄ¸÷¸öpropertyÓëxml
Îı¾Öи÷¸önode(½Úµã)µÄ¶ÔÓ¦);
messagecontract½«¶ÔÏó×é×°³Émessage(Ö¸¶¨MessageµÄHeader,body).ʵÏÖµÄÊÇobject¸÷¸öpropertyÓëÏûÏ¢µÄ¸÷¸öÔªËØµÄ¶ÔÓ¦.
¾ßÌåµÄÉî²ãÇø±ðÓÚÁªÏµ,ÒÔ¼°Ê¹Óó¡¾°,ÎÒ»¹²»¶®,Ï£ÍûÓÐÅóÓѶÔ×Å¿é±È½Ï¶®µÄ,¿ÉÒÔ½»Á÷Ò»ÏÂ.Èç¹ûºóÃæµÈÎÒŪ¶®Á˵ϰ,ÎÒÔÙרÃÅд²©ÎĽ»Á÷.
WCF(Èý) Message pattern
|