WCF(Èý) Message pattern
ÉÏ´ÎÔÛÃÇÉÔÉÔÌÖÂÛÁËWCFÖеÄcontract,Õâ´ÎÔÛÃÇÌÖÂÛMessage
Pattern.
WCFÖÐΪºÎ»áÓÐmessage patternÄØ?
ÎÒÃÇÖªµÀWCFµÄServer¶ËÓëclient¶ËÊÇͨ¹ýxml À´½øÐн»»¥µÄ.message patternÆäʵ¾ÍÊÇÖ¸server¶ËÓëclient¶Ë½»»¥xmlµÄ·½Ê½.
wcfÌṩÒÔÏÂÈýÖÖpattern:
1.Request-reply:client¶Ëµ÷ÓÃserver¶ËµÄ¹«¿ªµÄmethodºó,client¶ËÐèµÈserver¶Ëmethod·µ»Ø½á¹û(¼´:replyÏìÓ¦)ÒÔºó,²ÅÄÜ×ö¼ÌÐøclient¶ËµÄÏÂÒ»²½²Ù×÷.(Èç:clientµ÷ÓÃserver¶ËµÄmethodÍùÊý¾Ý¿âÖвåÈëÒ»ÌõÊý¾Ý.server¶Ë²åÈëÊý¾Ý³É¹¦ÒÔºó,·µ»ØÏàÓ¦µÄÊý¾Ý¿â²åÈë³É¹¦ÐÅÏ¢.ºÜ¶àÇé¿öÏÂʹÓõÄÊÇÕâÖÖ.
2.one-way:client¶Ëµ÷ÓÃserver¶ËµÄ¹«¿ªµÄmethodºó,client¶Ë²»ÐèµÈserver¶ËµÄmethod·µ»Ø½á¹û,±ã¿É¼ÌÐøclient¶ËÏÂÒ»²½²Ù×÷.(Èç:server¶Ë¼Ç¼client¶ËµÄÈÕÖ¾(log)ÐÅÏ¢).±êʶΪOne-wayµÄoperation(º¯Êý)µÄ·µ»ØÖµÖ»ÄÜÊÇvoid.
µ±clientÏòserver ·¢ÆðÁËrequestºó,²»ÐèÒªserver×ö³ö»ØÓ¦µÄÇé¿öʹÓÃone-way
message pattern.
3.duplicate:Request-Reply ºÍOne-way¶¼ÊÇÏÈÓÉclient¶Ë·¢ÆðµÄrequest(ÇëÇó);duplicateÔòÔÊÐíÓÐserver¶Ë·¢Æðrequest.
Á½ÖÖ·½Ê½ÊµÏÖduplicate:Ò»ÖÖÊÇtcp(ÕâÀïÏȲ»½²tcpµÄ·½Ê½,ÏȽ²httpµÄ·½Ê½).Ò»ÖÖÊÇhttp.
Http·½Ê½µÄ»°:ÊÇÏÈÓÉclient¶Ë·¢ÆðÒ»´Îone-way µÄrequest,È»ºóclient²»µÈ´ýserver¶Ë·µ»Ø½á¹û,¶øÊǶ˼ÌÐøÍùÏÂÖ´ÐÐ.µ±server¶ËÓнá¹û·µ»ØÊ±,ÔÙÓÐserver¶Ë·¢ÆðÒ»´Îone-wayµÄrequest.ËùÒÔduplicateÒ²½Ðcallback.
ÎÒÃÇÖªµÀµ±Ò»¸ö²Ù×÷ºÜ·ÑʱµÄ»°,ΪÁ˼õÉÙUIµÄÎÞÏìÓ¦,ÓиüºÃµÄÓû§ÌåÑé,»áʹÓÃcallback.wcfÒ²ÊÇ:µ±serverµÄÖ´ÐкܺÄʱµÄ»°,ÎÒÃÇ¿ÉÒÔʹÓÃduplicateµÄmessage
pattern.
4.ʵÏÖ:
4.1:Requst-Reply:ÊÇ×î¼òµ¥µÄ
[ServiceContract(CallbackContract = typeof(IDuplicateDemoCallback))] 2 public interface IService1 3 { 4 // ÔÚº¯ÊýÖÐ,ÎÒÃÇÈÃÏß³ÌÔÝÍ£,Ä£ÄâºÄʱµÄ²Ù×÷. 5 // ²ÎÊý:intervalΪÔÝÍ£µÄºÁÃëÊý,Óɵ÷ÓøÃmethodµÄclient¶ËÉ趨. 6 [OperationContract] 7 void RequestReply(int interval); 8 9 [OperationContract] 10 void DuplicateCommunicate(int interval); 11 12 } |
4.2:One-Way:(Ö»ÐèÒªÔÚrequst-replyµÄ»ù´¡ÉÏ,ʹoperationContract
µÄIsOneWay=true¼´¿É)
[ServiceContract(CallbackContract = typeof(IDuplicateDemoCallback))] 2 public interface IService1 3 { 4 // ÔÚº¯ÊýÖÐ,ÎÒÃÇÈÃÏß³ÌÔÝÍ£,Ä£ÄâºÄʱµÄ²Ù×÷. 5 // ²ÎÊý:intervalΪÔÝÍ£µÄºÁÃëÊý,Óɵ÷ÓøÃmethodµÄclient¶ËÉ趨. 6 [OperationContract(IsOneWay = true)] 7 void RequestReply(int interval); 8 9 [OperationContract(IsOneWay = true)] 10 void DuplicateCommunicate(int interval); 11 12 } |
4.3Duplicate:(ÓÐЩ¸´ÔÓ)ÓÐÒÔϲ½Öè:
4.3.1:ÔÚserver¶ËIService.csÎļþÖÐÌí¼Ó´úÂë:
// NOTE: You can use the "Rename" command on the "Refactor" menu to
change the interface name "IService1" in both code and config file together. 2 [ServiceContract(CallbackContract = typeof(IDuplicateDemoCallback))] 3 public interface IService1 4 { 5 // ÔÚº¯ÊýÖÐ,ÎÒÃÇÈÃÏß³ÌÔÝÍ£,Ä£ÄâºÄʱµÄ²Ù×÷. 6 // ²ÎÊý:intervalΪÔÝÍ£µÄºÁÃëÊý,Óɵ÷ÓøÃmethodµÄclient¶ËÉ趨. 7 [OperationContract(IsOneWay=true)] 8 void RequestReply(int interval); 9 10 [OperationContract(IsOneWay=true)] 11 void DuplicateCommunicate(int interval); 12 13 14 } 15 16 public interface IDuplicateDemoCallback 17 { 18 [OperationContract(IsOneWay=true)] 19 void DuplicateCommunicateCallback(string callbackMessage); 20 } |
4.3.2:ÔÚweb siteÏîĿϵÄweb.configÎļþ:ʹÆäÖ§³ÖwsDua
<?xml version="1.0"?> 2 <configuration> 3 4 <system.web> 5 <compilation debug="false" targetFramework="4.0" /> 6 </system.web> 7 <system.serviceModel> 8 <behaviors> 9 <serviceBehaviors> 10 <behavior> 11 <!-- To avoid disclosing metadata information,
set the value below to false and remove the metadata endpoint above before deployment --> 12 <serviceMetadata httpGetEnabled="true"/> 13 <!-- To receive exception details in faults for debugging purposes,
set the value below to true. Set to false before deployment to avoid disclosing exception information --> 14 <serviceDebug includeExceptionDetailInFaults="false"/> 15 </behavior> 16 </serviceBehaviors> 17 </behaviors> 18 <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 19 20 <services> 21 <service name="WcfMessagePatternLib.Service1" behaviorConfiguration=""> 22 <!-- Service Endpoints --> 23 <endpoint address="" binding="wsDualHttpBinding" contract="WcfMessagePatternLib.IService1"> 24 <identity> 25 <dns value="localhost"/> 26 </identity> 27 </endpoint> 28 <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 29 </service> 30 </services> 31 32 33 </system.serviceModel> 34 <system.webServer> 35 <modules runAllManagedModulesForAllRequests="true"/> 36 </system.webServer> 37 38 </configuration> |
4.3.3ÔÚclient¶ËÌí¼ÓÒ»¸öÀàÎļþÃüÃûΪCallback.cs:
ʹÆäʵÏÖIDuplicateDemoCallback½Ó¿Ú.
class Callback:ServiceReference1.IService1Callback 2 { 3 public void DuplicateCommunicateCallback(string callbackMessage) 4 { 5 MessageBox.Show(callbackMessage); 6 } 7 } ¸´ÖÆ´úÂë 1 private void Form1_Load(object sender, EventArgs e) 2 { 3 var context = new InstanceContext(new Callback()); 4 proxy = new Service1Client(context); 5 } |
4.3.4ÐÞ¸ÄclientÏîĿϵÄapp.configÎļþ:ʹÆäÖ§³Öwsdualhttp
<?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 <system.serviceModel> 4 <bindings> 5 <wsDualHttpBinding> 6 <binding name="WSDualHttpBinding_IService1" closeTimeout="00:01:00" 7 openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 8 bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 9 maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 10 messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"> 11 <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 12 maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 13 <reliableSession ordered="true" inactivityTimeout="00:10:00" /> 14 <security mode="Message"> 15 <message clientCredentialType="Windows" negotiateServiceCredential="true" 16 algorithmSuite="Default" /> 17 </security> 18 </binding> 19 </wsDualHttpBinding> 20 </bindings> 21 <client> 22 <endpoint address="http://localhost:8167/WebHost/Service.svc" 23 binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_IService1" 24 contract="ServiceReference1.IService1" name="WSDualHttpBinding_IService1"> 25 <identity> 26 <dns value="localhost" /> 27 </identity> 28 </endpoint> 29 </client> 30 </system.serviceModel> 31 </configuration> |
WCF(ËÄ) Configuration file (ÅäÖÃÎļþ)
Ç°Ãæ´óÖ½éÉÜÁ˵ãwcfµÄ¼¸¸öССµÄ»ù±¾¸ÅÄî. ÈκÎÒ»¸öм¼Êõ,¶¼ÄܸøÎÒÃÇ´øÀ´Ò»´ó¶ÑµÄ»ù±¾¸ÅÄî.
µ±È»WCFÒ²²»ÀýÍâ. ¹ØÓÚWCF¸ü¶àµÄ¸ÅÄî,ÔÚÒÔºóÔÙÌÖÂÛ.ÎÒÃÇÏÈÌÖÂÛÈçºÎÔÚ²»ÉîÈëÁ˽âÕâÒ»´ó¶ÑѧÊõ¶¨ÒåµÄǰÌáÏÂ,ʹÓÃÕâÏî¼¼Êõ.
ÔÚ¿ª·¢¹ý³ÌÖÐ,ʹÓÃconfiguration file (ÅäÖÃÎļþ)¾ßÓкÜÁé»îµÄºÃ´¦:ÒÔºóÓйØÓÚÅäÖõĸıä,²»±ØÖØÐ±àÒë´úÂë,Ö»Ðè´ò¿ªconfiguration
file ¸ÄһϾÍÐÐÁË,ʡʱʡÁ¦.
WCFÖÐconfiguration fileµÄµØÎ»²»¿ÉºöÊÓ.µ±È»ÎÒÃÇ¿ÉÒÔʹÓÃcodeµÄ·½Ê½,ʵÏÖWCFµÄ·þÎñµÄÿ¸ö½×¶Î.
µ«ÎÒÃǵÄÈí¼þ²úÆ·ÊÇÐèÒª¸ø¿Í»§ÔÚʵ¼Ê¹¤×÷ÖÐʹÓõÄ. ÎÒÃÇÒªÈÃÈí¼þ²úÆ·µÄºóÆÚά»¤¾¡¿ÉÄܵļòµ¥,ʡʱʡÁ¦.
WCFµÄºËÐÄÊÇService. Ò»¸öserviceÓаüº¬¶à¸öendpoint,
ÈçÏÂͼ:

´ò¿ªVS2010,File-->New project. Ñ¡ÔñWCF Service Library
Ä£°å. Solution Name ºÍproject NameÎÒÃǶ¼ÓÃĬÈϵÄ. µã»÷OK.
´Ëʱ´´½¨ÁËÒ»¸öWCF Library project. ´ò¿ªApp.config Îļþ,Äã»á¿´µ½ÒÔÏÂÄÚÈÝ:
<?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 4 <system.web> 5 <compilation debug="true" /> 6 </system.web> 7 <system.serviceModel> 8 <services> 9 <service name="WcfServiceLibrary4.Service1"> 10 <host> 11 <baseAddresses> 12 <add baseAddress = "http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary4/Service1/" /> 13 </baseAddresses> 14 </host> 15 <endpoint address ="" binding="wsHttpBinding" contract="WcfServiceLibrary4.IService1"> 16 <identity> 17 <dns value="localhost"/> 18 </identity> 19 </endpoint> 20 <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 21 </service> 22 </services> 23 <behaviors> 24 <serviceBehaviors> 25 <behavior> 26 <serviceMetadata httpGetEnabled="True"/> 27 <serviceDebug includeExceptionDetailInFaults="False" /> 28 </behavior> 29 </serviceBehaviors> 30 </behaviors> 31 </system.serviceModel> 32 33 </configuration> |
×¢:
µÚ1ÐÐ,¶¨Òå¸Ãxml fileµÄ°æ±¾ºÍʹÓõÄ×Ö·û¼¯. ÊǹØÓÚ¸ÃÅäÖÃÎļþµÄ»ù±¾ÐÅÏ¢,Óë³ÌÐòÅäÖÃÎÞ¹Ø,Ö»¹Ü±£³ÖĬÈϼ´¿É.
µÚ2ÐÐ,<configuration> node,¹ØÓÚ³ÌÐòÄÚµÄÅäÖÃ,¶¼±ØÐë°üº¬ÔÚ´ËnodeÀïÃæ.
µÚ5ÐÐ,ÊǹØÓÚdebugÅäÖÃ. Èç¹ûÊÇÔÚ¿ª·¢½×¶Î,°ÑËüÉèΪtrue,ÕâÑùµ÷ÊÔÆðÀ´·½±ã.
µÚ7--31ÐÐ,ÊÇ<system.serviceModel> node, ¹ØÓÚwcf serviceµÄºËÐÄÅäÖö¼ÔÚÕâ¸önodeÀïÃæ.
¸ÃnodeÏÂÃæÓÐÁ½¸ö×Ónode:Ò»¸öÊÇ<services>,ÁíÒ»¸öÊÇ<behaviors>.
³ý´ËÒÔÍâ,»¹¿ÉÒÔÓÐ<bindings>µÈ.<services>ÊÇ<service>µÄ¼¯ºÏ;<behaviors>ÊÇ<behavior>µÄ¼¯ºÏ;<bindings>ÊÇ<binding>µÄ¼¯ºÏ.
¶à˵һ¾ä: WCF³ÌÐòÉè¼ÆÐèҪעÒâÁ½·½ÃæµÄÄ£ÐÍ:Ò»ÊDZà³ÌÄ£ÐÍ;¶þÊÇͨÐÅÄ£ÐÍ. Ò»°ãÎÒÃÇ×öweb¿ª·¢Ö»ÐèÒª±à³ÌÄ£ÐÍ,ͨОͽ»¸øhttpÁË.
µ«ÊÇwcfÔÊÐíÎÒÃÇʹÓÃhttpÒÔÍâµÄÆäËûͨÐÅÐÒé.ËùÒÔ,ÎÒÃÇ¿¼ÂÇÁ˱à³Ì»¹±ØÐ뿼ÂÇͨÐÅÄ£ÐÍ.ºÃÔÚwcf¸øÎÒÃÇÌṩÁË·½±ãÖ®´¦:ËüÆÁ±ÎÁË¿ª·¢ÈËÔ±¶ÔͨÐÅÄ£Ð͵Ĵ¦Àí,Ö»ÐèÒªÎÒÃÇͨ¹ýbindings
API´´½¨Í¨ÐÅÄ£Ðͼ´¿É. ËùÒÔ,ÎÒÃǶÔbindingsµÄÖ¸¶¨,¾ÍÊÇÔÚ´¦ÀíͨÐÅÄ£ÐÍ.
µÚ8--22ÐÐ,ÊÇ<services>node,¸ÃnodeÏÂÃæÓжà¸ö<service>node.
µÚ9--21ÐÐ,ÊÇ<service>node,ËüµÄnameÖ¸¶¨ÁËʵÏÖÕâ¸öserviceµÄÀàÃû(È«Ãû,°üÀ¨namespace).¸Ã<services>ÏÂÃæÓÐÒ»¸ö<host>node,ºÍ¶à¸ö<endpoint>node.(ÈçÉÏÃæÎÒÃÇÌáµ½µÄÄÇÕÅͼ)
.
µÚ10ÐÐ,ÊÇ<host>node, <host>ÏÂÃæÓÐ<baseAddress>.
µÚ11-13ÐÐ,<baseAddress> node, <add>Ôö¼ÓÒ»¸ö¸ÃserviceµÄ»ùÖ·,<endpoint>ÀïÃæµÄaddress¾ÍÏà¶ÔÓÚÕâ¸öbaseAddressµÄ.
Èç¹ûÓжà¸öbaseAddressµÄ»°ÊǸù¾Ý<endpoint>ËùÖ¸¶¨µÄbinding·½Ê½ÓëbaseAddressµÄÐÎʽƥÅäµÄ.(Èç,<endpoint>ËùÖ¸¶¨µÄbinding·½Ê½ÊÇnetTcpBinding,¾Í»áÆ¥ÅäÒÔnet.tcp://´òÍ·µÄbaseAddress.)
µÚ15ÐÐ,<endpoint>node,<endpoint>³ýÁËnameÒÔÍâ,»¹ÓÐ×îÖØÒªµÄÈý²¿·Ö×é³É,¼ò³Æ:ABC.
AÊÇAddress,BÊÇBinding,CÊÇContract. Address¿ÉÒÔÊÇÒ»¸öÍêÕûµÄURL,»òÊÇÒ»¸öÏà¶ÔÓÚ»ùÖ·µÄURL,Èç¹ûΪ¿Õ,ÔòʹÓûùÖ·.BindingÖ¸¶¨Í¨ÐÅÄ£ÐͱÈÈç:http,tcp,mssqµÈ.
Contract¾ÍÊÇ·þÎñµÄcontract(¾ÍÊÇÇ°ÃæÎÒÃÇʹÓÃ[OperationContract]ÐÞÊεÄÄǸö·þÎñ½Ó¿Ú).
µÚ20ÐÐ,ÊÇÔªÊý¾ÝµÄ<endpoint>,ÓÃÓë·¢²¼Ò»Ð©ÔªÊý¾ÝÐÅÏ¢.
Ïȵ½Õâ°É.....
WCF(Îå) Host WCF Service
Õâ´ÎÎÒÃÇÌÖÂÛHost a WCF service.
ǰÊö
ΪÁËÈÃclient¿ÉÒÔʹÓÃservice,ÎÒÃDZØÐëhost serviceµ½Ò»¸öÿʱÿ¿Ì¶¼ÔÚÔËÐеĻ·¾³ÖÐ(ÎÒÃǽÐHost
Application),ÒòΪËüʱ¿ÌµÈ´ý×ÅÀ´×ÔclientµÄrequest(ÇëÇó). HostÓÐÈË·Òë³É"¼ÄËÞ",ÎÒÈÔʹÓÃHost.
Host application¸ºÔðstartºÍendservice, È»ºó¼àÌýÀ´×ÔclientµÄrequest,½âÎöclientµÄrequest,È»ºóµ÷ÓÃÏàÓ¦µÄservice.
×îºó°Ñ½á¹û·µ»Ø¸øclient.

Host ApplicationΪÿһ¸öService ´´½¨Ò»¸öServiceHost¶ÔÏó. µ±Óжà¸öServiceÊÇ,¾Í»á´´½¨¶à¸öServiceHost¶ÔÏó.
µ±clientÐèҪʹÓöàÖÖprotocol(ͨÐÅÐÒé),ÈçHttpºÍtcp,´ËʱÄã²»±Ø´´½¨¶à¸öservice,
ÒòÎªÇ°ÃæÎÒÃÇÖªµÀÒ»¸öService¿ÉÒÔÓжà¸öendpoint(endpoint °üº¬Address,Binding,Contract).
BindingÖ¸¶¨²»Í¬µÄprotocol,ËùÒÔ,ÎÒÃÇÖ»Ðè´´½¨¶à¸öendpoint,ÔÚbindingÖÐÖ¸¶¨²»Í¬µÄprotocol¼´¿É.
¿ÉÒÔ°Ñservice hostµ½ÒÔÏ»·¾³ÖÐ:
1.IIS:ÎÒÃÇÐèÒª´´½¨Ò»¸öWeb Site,ʹÓøÃWebsiteÈ¥host wcf,È»ºó½«¸Ãwebsite·Åµ½IISÖÐ.
Èç¹ûÄãʹÓÃÁËIISÈ¥host wcf,ÄÇôֻÄÜʹÓÃhttp protocol. µ±ÓÐrequestµ½À´Ê±,host
application¿ÉÒÔ×Ô¶¯¼¤»î,²¢¿ªÊ¼¼àÌý.
2.WAS:(Windows Process Activation Service)×÷ΪIIS7.0µÄÒ»¸öÐÂÌØÐÔ.ÎÒÃÇͬÑùÐèÒª´´½¨Ò»¸öweb
site .Vista,Windows 7, Windows Server2008 µÈ²Ù×÷ϵͳ¿ÉÒÔ°²×°WAS.
Èç¹ûÄãʹÓÃÁËWASÈ¥host wcf,¿ÉÒÔʹÓÃhttp ,tcp,MSMQ,Named Pipe protocol.
µ±ÓÐrequestµ½À´Ê±,host application¿ÉÒÔ×Ô¶¯¼¤»î,²¢¿ªÊ¼¼àÌý.
3.Managed Application(ÍйܳÌÐò,ÈçConsole,WinFrom,WPF): Self-Hosting.
µ±ÓÐrequestµ½À´Ê±,host application²»ÄÜ×Ô¶¯¼¤»î.ÐèÒªÔÚ´úÂëÖÐÊÖ¶¯new³öserviceHost¶ÔÏó.
ÎÒÃÇÈçºÎÑ¡ÔñÄÄÒ»ÖÖhost·½Ê½ÄØ?
´ð°¸ÊÇ:È¡¾öÓÚÄãµÄ²Ù×÷ϵͳ,ºÍͨÐÅÐèÇó,ºÍÌØ¶¨³¡¾°.
1.Èç¹ûÄãµÄ²Ù×÷ϵͳÊÇwindows server2003,²¢ÇÒ³ÌÐòÖ»ÓÃhttp¼´¿ÉÂú×ãÐèÇó. ÄÇôʹÓÃIISÈ¥host.
Èç¹û³ÌÐò³ýÁËʹÓÃhttp²»¿ÉÂú×ãÐèÇó(³ýÁËhttp,»¹ÐèÒªtcp),ÔòÒª´´½¨window ·þÎñÈ¥host.
2.Èç¹ûÄãµÄ²Ù×÷ϵͳÊÇwindows server2008(»ò windows 7 )ʹÓÃWAS. ÒòΪËü¿ÉÒÔÖ§³Ö¸ü¶àµÄprotocol.
3.Èç¹û½ö½öÓÃÓÚÑÝʾ,¿ÉÒÔʹÓÃConsoleÈ¥host. µ«ÊÇreleaseµ½ÕæÕýµÄ²úƷʱ,×îºÃÓÃwinForm»òWPF.
¶ÔÓÚÿһÖÖ·½Ê½,ÎÒÃÇÈçºÎʵÏÖÄØ?
|