ÈÈÃŹؼü×Ö£º ¡¡PHP ¡¡Cisco ¡¡seo ¡¡ÍøÂç¹ã¸æ ÐéÄâÖ÷»ú ÖÐÎÄÓòÃû

ʹÓà Web Services Enhancements 2.0 ½øÐбà³Ì

À´Ô´£º×ªÌù ×÷ÕߣºÎ´Öª ʱ¼ä£º2005-10-21 µã»÷£º

Ŀ¼

  • Rock Paper Scissors£º Ò»ÖÖ°²È«µÄ¡¢·Ö²¼Ê½ÏûÏ¢´¦ÀíʾÀýÓ¦ÓóÌÐò
  • Óë Windows °²È«ÐÔ¼¯³ÉµÄ Kerberos ÁîÅÆÖ§³Ö
  • °²È«²ßÂÔ
  • WSE 2.0 Ѱַ
  • TCP ÏûÏ¢´¦Àí
  • WSE 2.0 µÄÆäËû¹¦ÄÜ
  • С½á

Microsoft ·¢ÐÐÁË Web Services Enhancements (WSE) 1.0 °æ,ÒÔÔÚÖ§³ÖµÄ²úÆ·ÖÐÆôÓð²È«¡¢Â·Óɺ͸½¼þ£¬Í¬Ê±Ëü»¹Ö§³Ö¸ß¼¶ Web ·þÎñ¡£Web Services Enhancements 2.0£¨Ó¢ÎÄ£©ÒÑ´Ó¼òµ¥Ö§³Ö»ù±¾Ð­Òé·¢Õ¹µ½Ö§³ÖºËÐŦÄÜÓë²Ù×÷ϵͳµÄ¼¯³É£¬²¢ÔöÇ¿Á˲ßÂÔ¡¢ÐÅÈκÍÉÏÏÂÎÄÁîÅÆ¹¦ÄÜ¡£

WSE Ò²ÊÇ¶Ô .NET Framework Ö§³ÖµÄÀ©Õ¹£¬ËüÓÃÓÚ´´½¨ºÍʹÓà Web ·þÎñ£¬¶ø WSE 2.0 ²ÉÓÃеıà³Ìģʽ¡£¹ýÈ¥£¬Web ·þÎñÖ§³ÖÒ»Ö±ÒÀÀµ Internet Information Server (IIS) ×÷ΪÆä HTTP ·þÎñÆ÷Ö÷»ú£»ÏÖÔÚ£¬WSE 2.0 Ö§³Öͨ¹ý TCP/IP »òÔÚ½ø³ÌÄÚÀ´·¢ËÍÏûÏ¢¡£ÕâÑù£¬Äú¿ÉÒÔͨ¹ý¶ÔµÈ¡¢µ¥Ïò¡¢Òì²½µÈ·½Ê½½«ÏûÏ¢´Ó·þÎñÆ÷·¢Ë͵½¿Í»§¶Ë¡£

ÏÂÃæ£¬ÎÒÃǽ«¼òÒª½éÉÜ WSE 2.0 µÄ¼¸¸öÖ÷Òª¹¦ÄÜ£¬²¢¼ÙÉèÄúÒÑÊìϤ WSE 1.0¡£ÓÐ¹Ø WSE 1.0 µÄÏêϸÐÅÏ¢£¬Çë²ÎÔÄ Programming with Web Services Enhancements 1.0 for Microsoft .NET£¨Ó¢ÎÄ£©¡£

Rock Paper Scissors£ºÒ»ÖÖ°²È«µÄ¡¢·Ö²¼Ê½ÏûÏ¢´¦ÀíʾÀýÓ¦ÓóÌÐò

ΪÁËչʾ WSE 2.0 µÄ¸÷¸ö·½Ã棬ÎÒÏë´´½¨Ò»¸öÓ¦ÓóÌÐòÒÔչʾһЩа²È«¹¦ÄܺÍÏûÏ¢´¦Àí¹¦ÄÜ¡£¾ßÌåÀ´Ëµ£¬ÎÒϲ»¶Ê¹Óà TCP ÏûÏ¢´¦ÀíÖ§³ÖÀ´ÏÔʾ¶ÔµÈͨÐÅ£¬²¢Ê¹ËüÔÚ Windows °²È«ÐÔÁìÓò¹¤×÷¡£ÎÒÏëµ½µÄÊÇÒ»¸ö¼òµ¥µÄ·Ö²¼Ê½°æ±¾µÄ¾É Rock Paper Scissors ÓÎÏ·£¬ÏÖÔÚ¿ÉÒÔÓà WSE 2.0 ½øÐа²È«·Ö·¢¡£

Rock Paper Scissors ÊÇÒ»¸öÁ½È˶ùͯÓÎÏ·£¬´«Í³ÉϰüÀ¨ÈÃÿ¸öº¢×ÓÅÄÊÖÈý´Î£¬ÔÚµÚÈý´ÎÅÄÊÖʱ³öʾʯͷ¡¢¼ôµ¶»ò²¼µÄÐÎ×´¡£¸ù¾ÝϱíÖÐËùʾÀíÓɾö¶¨Ê¤Õߣº

  ʯͷ ²¼ ¼ôµ¶
ʯͷ ƽ¾Ö ²¼¹üʯͷ¡£
²¼·½Ó®£¡
ʯͷÔÒ»µ¼ôµ¶¡£
ʯͷ·½Ó®£¡
²¼ ²¼¹üʯͷ¡£
²¼·½Ó®£¡
ƽ¾Ö ¼ôµ¶¼ô¿ª²¼¡£
¼ôµ¶·½Ó®£¡
¼ôµ¶ ʯͷÔÒ»µ¼ôµ¶¡£
ʯͷ·½Ó®£¡
¼ôµ¶¼ô¿ª²¼¡£
¼ôµ¶·½Ó®£¡
ƽ¾Ö

¸ÃÓÎϷͨ³£ÓÃÓÚÈ·¶¨ÓÉË­ÏÈÑ¡Ôñ²Î¼ÓɳµØ°ôÇòÈüµÄÑ¡ÊÖ¡¢Ë­³Ô×îºóµÄ±ùä¿ÁÜ£¬ÉõÖÁÓÉË­»÷´ò¶Ô·½µÄÊÖ±Û¡£

ÎÒÃǽ« Rock Paper Scissors °á³öɳµØ£¬Ö±½ÓÓ¦ÓÃÔÚ¾ßÓÐ WSE 2.0 µÄ°²È«¡¢Ð­×÷¡¢ÍŽáµÄÆóÒµ¼¼ÊõÖС£¸ÃÓÎÏ·µÄÏûÏ¢´¦Àí½á¹¹ÈçÏÂÃæµÄͼ 1 Ëùʾ¡£

ͼ 1£ºRock Paper Scissors ÏûÏ¢´¦ÀíºÍ°²È«Ä£ÐÍ

Rock Paper Scissors ÓÐÁ½¸öÖ÷Òª×é¼þ£ºÒ»¸öÊÇÃûΪ RPSService µÄ ASP.NET Web ·þÎñ£¬ÁíÒ»¸öÊÇÓɶà¸öÓû§ÔËÐеĶԵÈÓ¦ÓóÌÐò¡£RPSService µÄ×÷ÓÃÊÇÈÃÓû§×¢²áÍæÓÎÏ·»òѰÕÒ¶ÔÊÖÀ´ÍæÓÎÏ·¡£¶ÔµÈÓ¦ÓóÌÐòÏÈÊÇÓë RPSService ͨÐÅÒÔÕÒµ½ÒªÓë֮ͨÐŵĶԷ½£¬È»ºóÔÚÈ·¶¨¶ÔÊÖºóÖ±½ÓÓëÆä¶Ô·½½øÍ¨ÐÅ¡£

¶ÔµÈ£º¶ÔÓÚÏûÏ¢´¦Àí£¬WSE 2.0 ´Ó»ùÓÚ´«Í³ HTTP ÇëÇó/ÏìÓ¦£¨¼´ RPC »·¾³£©×ª»»Îª²ÉÓÿÉÄÜͬʱ¾ßÓжԵÈÏûÏ¢´¦Àí¡¢Òì²½ÏûÏ¢´¦ÀíºÍÏûÏ¢¶ÓÁеĻ·¾³¡£

Kerberos£ºÕû¸öÓ¦ÓóÌÐòÊÇͨ¹ýʹÓü¯³ÉµÄ Windows Kerberos Ö§³Ö´´½¨µÄ¡£Ê¹Óà WSE 2.0£¬Äú¿ÉÒÔÓÃÒ»ÖÖ°²È«µÄ·½Ê½Á¬½ÓÍøÂç¡£ÎÒÃǽ«½øÐÐÑéÖ¤¡¢Êý×ÖÇ©ÃûºÍ¼ÓÃÜÏûÏ¢ÒÔÈ·±£¾ßÓÐ×î¸ßµÄ°²È«ÐÔ£¬ÇÒÕ⽫ÍêÈ«»ùÓÚ Windows Óû§ÕÊ»§¡£

±ã½Ý¹ÜÀí£º²»Óñàд´úÂëÀ´¿ØÖÆ·ÃÎÊ£¬ÎÒÃDZã¿ÉÒÔͨ¹ý²ßÂÔÅäÖÃÎļþÀ´ÅäÖÃÏûÏ¢µÄ°²È«ÐÔ¡£Í¨¹ý²ßÂÔÎļþ£¬¿ÉÒÔ¿ØÖÆÒªÊµÏֵݲȫÖÖÀà¡¢Òª¶ÔÏûÏ¢µÄÄIJ¿·Ö½øÐÐÊý×ÖÇ©Ãû»ò¼ÓÃܼ°ÆäʵÏÖ·½Ê½£¬»¹¿É»ùÓÚÏûϢʱÏÞÐÔ¿ØÖƽÓÊÜÌõ¼þ¡£Ä¿Ç°£¬¿ÉÒÔ¿ØÖư²È«ÐÔµÄÏàÓ¦ÈËԱΪ£ºÄúµÄ¹ÜÀíÔ±¡£

Rock Paper Scissors£º¸ÃÓ¦ÓóÌÐòµÄÖØÒª×÷Óò»ÔÚÓÚÓ¦ÓóÌÐò±¾Éí£¬¶øÊÇËüÓë±¾ÀýÖв»Í¬ÊµÌåͨÐÅʱʹÓð²È«ÏûÏ¢¡¢²ßÂÔºÍѰַµÄ·½Ê½¡£Äú²Â²»µ½£¬ÎÒÕýÏëÏóÎÒµÄÀϰå˵£º¡°ÎªÁ˾ö¶¨Ö°Ô±½ñÄêµÄ½±½ð£¬ÎÒÏëÈÃÄãÃÇÿÈËÔËÐÐÒ»¸öСµÄÓ¦ÓóÌÐò RockPaperScissors.exe...¡±

Óë Windows °²È«ÐÔ¼¯³ÉµÄ Kerberos ÁîÅÆÖ§³Ö

ÎÒÃÇÒªÌÖÂÛµÄ WSE 2.0 µÄµÚÒ»²¿·ÖÊÇÖ§³Ö Kerberos °²È«ÁîÅÆ¡£WSE 1.0 Ö§³ÖÓû§ÃûÁîÅÆºÍ X.509 °²È«ÁîÅÆ¡£¿ÉÒÔ½«ÕâЩÁîÅÆÌí¼Óµ½°²È«ÁîÅÆµÄÏûÏ¢¼¯ºÏ£¬²¢ÓÃÓÚ´´½¨Êý×ÖÇ©Ãû»òÖ´ÐмÓÃÜ¡£¶ÔÓÚ WSE 2.0 À´Ëµ£¬µ±ÔÚ Windows Server 2003 »ò´øÓÐ Service Pack 1 µÄ Windows XP ÉÏÔËÐÐʱ£¬ÔòÒÑÌí¼ÓÁË Kerberos ÁîÅÆÖ§³Ö¡£¸üÖØÒªµÄÊÇ£¬Kerberos ÁîÅÆÖ§³ÖÄܹ»Ó뼯³ÉµÄ Windows °²È«ÐÔÒ»ÆðʹÓã¬ÕâÑù£¬²»ÔÙÐèÒª½«Óû§ÃûÓ³Éä³É Windows Óû§£¬Ò²²»ÓÃÁíÍâÉèÖÃÓû§Êý¾Ý¿â£¬¿ÉÒÔ»ùÓÚ Windows Óû§¿ØÖÆ¶Ô Web ·þÎñµÄ·ÃÎÊ¡£

ÔÚΪ RPSService Ìí¼Ó´úÂë֮ǰ£¬ÎÒÒª×öµÄµÚÒ»¼þÊÂÊÇÔÚ×Ô¼ºµÄÏîÄ¿ÖÐÌí¼Ó¶Ô Microsoft.Web.Services ³ÌÐò¿âµÄÒýÓá£Èç¹ûÄúµÄ¼ÆËã»úÉϰ²×°µÄÊÇ WSE 1.0£¬ÄÇôÌí¼ÓÒýÓÃʱעÒâÑ¡Ôñ 2.0 °æµÄ³ÌÐò¿âºÜÖØÒª¡£ÐÒÔ˵ÄÊÇ£¬³ÌÐò¼¯µÄ°æ±¾ºÅ¾ÍÁÐÔÚ³ÌÐò¼¯Ãû³ÆÖ®ºó£¬Òò´Ë¿ÉÒÔÇáËɵØÑ¡ÔñÕýÈ·µÄ³ÌÐò¼¯¡£Í¼ 2 ÏÔʾµÄÊÇÑ¡¶¨ÁË WSE 2.0 ³ÌÐò¿âµÄ Add Reference£¨Ìí¼ÓÒýÓã©¶Ô»°¿ò¡£Çë×¢Ò⣬1.0 °æ±¾µÄ³ÌÐò¿â¾ÍÔÚÑ¡¶¨µÄ³ÌÐò¿â֮ǰ¡£

ͼ 2£º½«ÒýÓÃÌí¼Óµ½ WSE 2.0 ³ÌÐò¼¯

ÏÂÃæµÄ´úÂëÑÝʾÈçºÎͨ¹ý±à³ÌµÄ·½Ê½½« Kerberos ÁîÅÆÌí¼Óµ½ÁîÅÆÏûÏ¢¼¯ºÏ¡£ËüÊÇÒ»·½Ë½ÏÂÏòÁíÒ»·½·¢ËÍÆä¶¯×÷ʱËùʹÓõĴúÂë¡£¸Ã´úÂëʹÓà WSE 2.0 µÄÒì²½ TCP ÏûÏ¢¹¦ÄÜ£¨Ëæºó½«Ïêϸ˵Ã÷£©£¬µ«ÓÃÓÚÌí¼ÓÁîÅÆºÍ¼ÓÃܵĴúÂëÀàËÆÓÚ WSE 1.0 ÖÐÓÃÓÚÆäËûÀàÐÍÁîÅÆµÄ´úÂë¡£

using Microsoft.Web.Services.Security.Kerberos;

   a€|

KerberosToken peerToken;

   a€|

peerToken = new KerberosToken("host/" + OpponentUri.Host);

   a€|

envelope.Context.Security.Tokens.Add(peerToken);

envelope.Context.Security.Elements.Add(new EncryptedData(peerToken));

Çë×¢Ò⣬ÁîÅÆÊÇͨ¹ý´«µÝÁ¬½ÓÖ÷»úµÄÃû³Æ´´½¨µÄ¡£ÓÃÓÚ´´½¨¸ÃÁîÅÆµÄ Kerberos ±êÇ©ÔÊÐíµ±Ç°Óû§ÓëָʾµÄÖ÷»ú½øÐÐͨÐÅ¡£¾ßÌåÀ´Ëµ£¬¸ÃÁîÅÆ½«ÓÃÓÚ¼ÓÃÜÒª·¢Ë͵ÄÏûÏ¢£¬ÒÔ±ãÖ»ÓиÃÔ¶³ÌÖ÷»ú²Å¿ÉÒÔ¶ÁÈ¡ÕâЩÏûÏ¢¡£

ÓëÆäËûÀàÐÍÁîÅÆ²»Í¬£¬Kerberos ÁîÅÆÊ¹Óõ±Ç°µÄ Windows Óû§°²È«ÉÏÏÂÎÄ´´½¨¸ÃÁîÅÆ¡£Èç¹ûÄú²éѯÒÑ´´½¨µÄÁîÅÆ£¬Äú½«»áÕÒµ½Ò»¸ö Principal ³ÉÔ±ÊôÐÔ£¬Ëüָʾ´´½¨¸ÃÁîÅÆµÄÓû§¡£ÎÒÃÇ´Ó½ÓÊÕÏûÏ¢£¨´øÓÐ Kerberos ÁîÅÆ£©µÄ´úÂëµÄÖ÷ÌåÖлñÈ¡Óû§Ãû¡£ÏÂÃæµÄ opponent ±äÁ¿ÊÇÒ»¸ö KerberosToken ¶ÔÏ󣬸öÔÏóÊÇ´Ó´«ÈëÏûÏ¢µÄ Tokens ¼¯ºÏÖлñµÃµÄ¡£¿ÉÒÔÏñÏÂÃæ»ñÈ¡Ãû³ÆÄÇÑùÀ´»ñÈ¡¹ØÓÚÁîÅÆ´´½¨ÕßµÄÐÅÏ¢£¬µ«Ò²¿ÉÒÔµ÷Óà IsInRole() ·½·¨À´Í¨¹ý±à³ÌµÄ·½Ê½È·¶¨ Active Directory ×é³ÉÔ±¡£

this.opposingNameLabel.Text 

    = "Playing: " + opponent.Principal.Identity.Name;

×¢Ò⣺Èç¹ûÔÚ Windows XP ÉÏÔËÐÐ Web ·þÎñ£¬ÔòʹÓà Kerberos ÁîÅÆÊÔͼÁ¬½Óµ½ Web ·þÎñʱ£¬Äú¿ÉÄÜ»áÓöµ½ÒÔÏ´íÎó£º

Microsoft.Web.Services.Security.SecurityFault: An invalid security token 

was provided ---> System.Security.SecurityException: Unable to validate 

incoming Kerberos ST.  LsaLogonUser failed with the following message: A 

required privilege is not held by the client.  Substatus is 0.

³öÏָôíÎóÊÇÓÉÓÚµ÷ÓÃÃûΪ LogonUser µÄ°²È« API ʱ£¬ASPNET ÕÊ»§ÎÞ·¨ÑéÖ¤ Kerberos ÁîÅÆ¡£µ÷Óà LogonUser API µÄÓû§ÕʺÅÒªÇó¾ßÓС°×÷Ϊ²Ù×÷ϵͳµÄÒ»²¿·ÖÀ´²Ù×÷¡±ÌØÈ¨¡£ÔÚĬÈÏÇé¿öÏ£¬ASPNET ÕÊ»§£¨¼´ÔËÐÐ ASP.NET ´úÂëµÄÕÊ»§£©²»¾ßÓиÃÌØÈ¨¡£½¨ÒéÄúÔÚºÏÊʵķþÎñÆ÷ƽ̨Èç Windows Server 2003 ÉÏÔËÐÐÒÑÉèÖà Kerberos °²È«µÄ Web ·þÎñ¡£ÔÚ Windows Server 2003 ÉÏ£¬µ÷Óà LogonUser ʱ²»ÐèÒª¡°×÷Ϊ²Ù×÷ϵͳµÄÒ»²¿·ÖÀ´²Ù×÷¡±ÌØÈ¨¡£ÔÚ Windows XP ÉÏ£¬¿ÉÒÔʹÓà Local Security Policy ¹ÜÀíÓ¦ÓóÌÐòÀ´ÅäÖÃÓµÓС°×÷Ϊ²Ù×÷ϵͳµÄÒ»²¿·ÖÀ´²Ù×÷¡±ÌØÈ¨µÄÕÊ»§£¬°üÀ¨ ASPNET ÕÊ»§£¬µ«Ó¦¸Ã×¢ÒâÕâ»áÔì³É ASP.NET Ó¦ÓóÌÐòµÄ°²È«ÐÔ²»¹»ÑÏÃÜ¡£

°²È«²ßÂÔ

ËäÈ»ÒÔÉÏÌÖÂ۵ĴúÂëÓë WSE 1.0 ÖеĴúÂë·Ç³£ÏàËÆ£¬µ«Ëü¾ßÓÐÒ»¸öÓŵ㣺½« Principal ¶ÔÏóÓëÒ»¸öÁîÅÆ¹ØÁª£¬¿ÉÒÔÓÃÀ´²éÕÒij¸ö¾ßÌ尲ȫÁîÅÆµÄÌØ¶¨ÊôÐÔ¡£ÕâÖÖ·½·¨´æÔÚµÄÎÊÌâÔÚÓÚÈÔÒª±àд´úÂëÀ´È·¶¨Ó¦ÊôÓÚ¹ÜÀíÈÎÎñµÄ·ÃÎʹ¦ÄÜ¡£Îª´Ë£¬WSE 2.0 ÌṩÁË´´½¨²ßÂÔÎļþÖ§³Ö¡£

²ßÂÔÎļþ»ùÓÚ WS-Policy ¹æ·¶£¬¸Ã¹æ·¶ÊÇΪÔÊÐí Web ·þÎñÉùÃ÷´«ÈëÏûÏ¢Óйذ²È«ÐԵȷ½ÃæµÄÒªÇó¶ø´´½¨µÄ¡£Èç¹ûÏ£ÍûÇ©Ãû»òÕß¼ÓÃÜËùÓлò²¿·ÖÏûÏ¢£¬WSE 2.0 ÔÊÐíÎÒÃÇ¿ØÖÆ Web ·þÎñµÄÓû§ÔÚÏûÏ¢ÖÐʹÓõݲȫÁîÅÆÀà±ð£¬ÒÔ¼°¿ØÖƶԽÓÊÕÏûϢʱÏÞµÄÏÞÖÆ£¬ÉõÖÁ¿ÉÒÔΪ´«ÈëµÄÏûÏ¢Ö¸¶¨½ÇÉ«³ÉÔ±ÏÞÖÆ¡£

ÒÔϲßÂÔÎļþ˵Ã÷ Web ·þÎñ½ÓÊÕµÄÏûϢӦʹÓà Kerberos ÁîÅÆ¶ÔÏûÏ¢Ö÷Ìå½øÐÐÇ©Ãû¡£

<?xml version="1.0" encoding="utf-8"?>

<policyDocument 

    xmlns="http://schemas.microsoft.com/wse/2003/06/Policy">

  <mappings 

      xmlns:wse="http://schemas.microsoft.com/wse/2003/06/Policy">

    <mapDefault 

        policy="#policy-5903e02b-9c11-4dc5-8ca0-42d4e9d0bcde" />

  </mappings>

  <policies 

      xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility">

    <wsp:Policy 

        wsu:Id="policy-5903e02b-9c11-4dc5-8ca0-42d4e9d0bcde" 

        xmlns:wsp="http://schemas.xmlsoap.org/ws/2002/12/policy">

      <wsse:Integrity wsp:Usage="wsp:Required"

          xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext">

        <wsse:TokenInfo>

          <SecurityToken

   xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext">

<wsse:TokenType>wsse:Kerberosv5ST</wsse:TokenType>

          </SecurityToken>

        </wsse:TokenInfo>

        <wsse:MessageParts 

Dialect="http://schemas.xmlsoap.org/2002/12/wsse#part">

          wsp:Body()

        </wsse:MessageParts>

      </wsse:Integrity>

    </wsp:Policy>

  </policies>

</policyDocument>

policyDocument ¸ùÔªËØÓÐÁ½¸ö×ÓÔªËØ£ºmappings ºÍ policies¡£policies ÔªËØº¬ÓÐÒ»¸ö»ò¶à¸ö±íÊ¾ÌØ¶¨ÒªÇó¼¯µÄ Policy ÔªËØ¡£ÔÚʾÀýÖУ¬²ßÂÔ°üº¬Ò»¸ö Integrity ÒªÇ󣬱íʾ¸ÃÏûÏ¢ÐèÒªÊý×ÖÇ©Ãû¡£TokenInfo ÔªËØ°üº¬¹ØÓÚËùÐèÁîÅÆÖÖÀàµÄÐÅÏ¢£¬±¾Ê¾ÀýÖÐΪ Kerberos ÁîÅÆ¡£×îºó£¬ÕâÒ»ÌØ¶¨ÍêÕûÐÔÒªÇóÖ¸³ö±ØÐëÇ©ÃûµÄÎĵµ²¿·ÖΪÕýÎÄ£¬ÕâÊÇʹÓà MessageParts ÔªËØÖ¸Ê¾µÄ¡£

policyDocument µÄ mappings ²¿·Ö½ö½«Ìض¨ÖÕ½áµãÓë policies ²¿·ÖÖеIJßÂÔ¹ØÁª¡£±¾Ê¾Àý²»°üÀ¨Ìض¨ÖÕ½áµãµÄÈκÎÓ³É䣬½ö°üÀ¨µ¥Ò»µÄĬÈÏÓ³Éä¡£

³ýÁËʵ¼Ê´´½¨²ßÂÔÎļþÒÔÍ⣬»¹ÐèÒªÈà WSE ³ÌÐò¿âÖªµÀ¸Ã²ßÂԵĴæÔÚ¡£Òò´Ë£¬ÓбØÒªÅäÖà Web ·þÎñÒÔʹÓô´½¨µÄ²ßÂÔÎļþ¡£Îª´Ë£¬ÐèÒªÐÞ¸Ä Web.config Îļþ¡£ÏÂÃæµÄ Web.config Îļþ¸ø³öÁËΪÆôÓà WSE SoapExtension¡¢ÆôÓà WSE ÅäÖò¿·ÖÖеĴ¦Àí³ÌÐòÒÔ¼°Ìí¼Ó½ÓÊÕ²ßÂÔ»º´æ¶ø×÷µÄ¸ü¸Ä¡£

<?xml version="1.0" encoding="utf-8"?>

<configuration>

  <configSections>

    <!-- Ìí¼Ó¶ÔÅäÖò¿·ÖµÄÒýÓᣠÇë×¢Ò⣬

         ÀàÐÍÃû³ÆÒª»»ÐÐÒÔ±ãÓÚÔĶÁ£¬²¢ÇÒ²»Ó¦°üº¬

         »»Ðзû¡£-->

    <section name="microsoft.web.services" 

        type="Microsoft.Web.Services.Configuration

        .WebServicesConfiguration, Microsoft.Web.Services,

         Version=2.0.0.0, Culture=neutral,

         PublicKeyToken=31bf3856ad364e35" />

  </configSections>

  <system.web>



<!-- ΪÁ˼ò½à£¬É¾³ýÆäËûÔªËØ -->



    <webServices>

      <soapExtensionTypes>

        <!-- Ìí¼Ó WSE SoapExtension¡£Çë×¢Ò⣬

 ÀàÐÍÃû³ÆÒª»»ÐÐÒÔ±ãÓÚÔĶÁ²¢ÇÒ

 ²»Ó¦°üº¬»»Ðзû¡£-->

        <add type="Microsoft.Web.Services

.WebServicesExtension, Microsoft.Web.Services, 

Version=2.0.0.0, Culture=neutral,

PublicKeyToken=31bf3856ad364e35" 

priority="1" group="0" />

      </soapExtensionTypes>

    </webServices>

  </system.web>

  <!-- WSE Configuration Section -->

  <microsoft.web.services>

    <policy>

      <receive>

        <cache name="policyCache.xml" />

      </receive>

    </policy>

  </microsoft.web.services>

</configuration>

ÖÁ´Ë£¬Òѽ« Web ·þÎñÅäÖóÉÖ»½ÓÊÜ·ûºÏ policyCache.xml ÎļþÖвßÂÔÒªÇóµÄÇëÇó¡£

Èç¹ûÐèÒªÈùÜÀíÔ±ÎªÌØ¶¨µÄ Web ·þÎñÅäÖòßÂÔ£¬ÎÒÃÇͬÑùÏ£Íû¶ÔʹÓà Web ·þÎñµÄÓ¦ÓóÌÐò½øÐÐÀàËÆÅäÖá£×ܶøÑÔÖ®£¬Èç¹û¹ÜÀíÔ±¸ü¸Ä²ßÂÔºóÎÒÃDZØÐëÖØÐÂÉú³ÉʹÓõÄÓ¦ÓóÌÐò£¬Ôò²¢Ã»ÓÐÍêȫʵÏÖÅäÖÃÏûÏ¢ÒªÇóʱÎÞÐèÖØÐÂÉú³É Web ·þÎñµÄ¹¦ÄÜ¡£

ҪΪʹÓõÄÓ¦ÓóÌÐòÌí¼Ó¸Ã¹¦ÄÜÀ´·¢ËÍ·ûºÏÌØ¶¨²ßÂÔµÄÏûÏ¢£¬ÐèÒª±¾µØ¾ßÓиóÌÐò¿ÉÒÔʹÓõIJßÂÔÎļþ¡£¶ÔÓÚÒªµ÷Óà .asmx Web ·þÎñµÄ Rock Paper Scissors ¶ÔµÈÓ¦ÓóÌÐò£¬ÎÒÃÇÖ»Êǽ« policyCache.xml Îļþ¸´ÖƵ½¸Ã¿ÉÖ´ÐгÌÐòµÄ¹¤×÷Ŀ¼¡£Èçͬ¶Ô Web ·þÎñµÄ´¦Àí£¬½«¸ÃÓ¦ÓóÌÐòÅäÖóÉʹÓÃÆä .config ÎļþÖеIJßÂÔÎļþ£¨±¾Ê¾ÀýÖÐΪ RockPaperScissors.exe.config£©¡£¸ÃÅäÖÃÎļþÈçÏÂËùʾ¡£

<?xml version="1.0" encoding="utf-8"?>

<configuration>

  <configSections>

    <!-- Ìí¼Ó¶ÔÅäÖò¿·ÖµÄÒýÓá£Çë×¢Ò⣬

         ÀàÐÍÃû³ÆÒª»»ÐÐÒÔ±ãÓÚÔĶÁ£¬²¢ÇÒ²»Ó¦°üº¬

         »»Ðзû¡£-->

    <section name="microsoft.web.services"

        type="Microsoft.Web.Services.

        Configuration.WebServicesConfiguration, 

        Microsoft.Web.Services, Version=2.0.0.0, 

        Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

  </configSections>

  <microsoft.web.services>

    <policy>

      <send>

        <cache name="policyCache.xml" />

      </send>

    </policy>

  </microsoft.web.services>

</configuration>

¶ÔµÈÓ¦ÓóÌÐò½«Í¨¹ý·¢ËÍ·ûºÏ policyCache.xml ÎļþÖеÄÒªÇóµÄÏûÏ¢Óë Web ·þÎñ½øÐÐͨÐÅ¡£

WSE 2.0 Ѱַ

WSE 1.0 Óë WSE 2.0 Ö®¼äµÄÇø±ðÖ®Ò»ÊÇ¶Ô WS-Addressing µÄÖ§³Ö¡£WS-Addressing Ìæ»»ÁË WSE 1.0 ÖÐÖ§³ÖµÄ WS-Routing ¹æ·¶µÄ´ó²¿·Ö¹¦ÄÜ¡£´Ó¹¦ÄÜ·½ÃæÀ´Ëµ£¬WS-Addressing ²»Êǽ«Öصã·ÅÔÚ·ÓÉ·¾¶ÉÏ£¬¶øÊÇÌṩһÖÖ»úÖÆ½« To ºÍ From ±êÍ·Ìí¼Óµ½ SOAP ÐÅ·âÖС£WS-Addressing Ò²Ö§³Ö Action¡¢ReplyTo ºÍ FaultTo ±êÍ·¡£Action ±êÍ·ÀàËÆÓÚͨ¹ý HTTP ·¢ËÍ SOAP ÏûϢʱͨ³£Ê¹ÓÃµÄ SOAPAction HTTP ±êÍ·¡£¶ÔÓÚ .asmx Web ·þÎñ£¬HTTP SOAPAction ±êÍ·ÓÃÓÚÈ·¶¨½ÓÊÕ´«ÈëÏûϢʱӦµ÷Ó÷þÎñµÄÄÄÖÖ Web ·½·¨¡£Óë´ËÀàËÆ£¬Action SOAP ±êÍ·ÓÃÓÚÈ·¶¨Í¨¹ý·Ç HTTP ´«Êä½ÓÊÕÏûϢʱҪµ÷Óõĺ¯Êý¡£

ÔÚ Rock Paper Scissors Ó¦ÓóÌÐòÖУ¬ÎÒÃÇ»¹½«ÀûÓà ReplyTo ±êÍ·À´È·¶¨½ÓÊÕÏÂÒ»ÏûÏ¢µÄµØÖ·¡£µ±¶ÔµÈÓ¦ÓóÌÐòÖ®Ò»Ïò RPSService ·¢Ë͵¥Ïò RegisterPlayer ÏûϢʱ£¬½«Ö¸¶¨Ò»¸ö ReplyTo ÖÕ½áµã£¬Ö¸Ê¾¶ÔµÈͨÐÅ¿ªÊ¼Ê±ÓÃÀ´½ÓÊÕ¶Ô·½·¢Ë͵ÄÏûÏ¢µÄµØÖ·¡£Óë´ËÀàËÆ£¬µ±µÚ¶þ¸ö¶ÔµÈÓ¦ÓóÌÐò½« FindPlayer ÏûÏ¢·¢Ë͵½ RPSServer ʱ£¬RPSServer ½«·µ»ØÒ»¸ö´øÓÐ ReplyTo ±êÍ·µÄÏûÏ¢£¬¸Ã±êͷָʾµÚÒ»¸ö¶ÔµÈÓ¦ÓóÌÐòµÄÖÕ½áµã¡£Õâ¾Í¸æËßµÚ¶þ¸ö¶ÔµÈÓ¦ÓóÌÐòÓ¦¸Ã½«×Ô¼ºµÄÏÂÒ»ÏûÏ¢·¢Ë͵½µÚÒ»¸ö¶ÔµÈÓ¦ÓóÌÐòµÄÖÕ½áµã¡£ÔÚÓàϵĶԵÈÏûÏ¢ÖУ¬¼ÌÐøÖ¸¶¨ ReplyTo ±êÍ·À´²»¶Ïָʾ½ÓÊÕÏÂÒ»ÏûÏ¢µÄµØÖ·¡£

ÏÂÃæÊǶԵÈÓ¦ÓóÌÐòʹÓõIJ¿·Ö´úÂ룬ÔÚ´úÂëÖУ¬Ê×ÏÈÕìÌý¶ÔµÈͨÐÅ£¬È»ºóÔÚµ÷Óà RPSServer RegisterPlayer Web ·½·¨Ö®Ç°Í¨¹ý ReplyTo ±êͷָʾ URI¡£

myPeerUri 

    = new Uri("soap.tcp://" 

      + System.Net.Dns.GetHostName() 

      + ":3131/RPSPeer1");

SoapReceivers.Add(myPeerUri, typeof(PeerService));



RPSServ.RPSServerWse proxy = new RPSServ.RPSServerWse();

proxy.RequestSoapContext.ReplyTo = myPeerUri;

TCP ÏûÏ¢´¦Àí

ÔÚ WSE 2.0 ÖУ¬ÏûÏ¢´¦ÀíÊÇÐÂÔö¹¦ÄܵÄÖ÷Òª²¿·Ö¡£WSE 2.0 ͨ¹ýÒì²½ TCP »òÇëÇó/ÏìÓ¦·½Ê½ TCP Ϊ½ø³ÌÖеÄͨÐÅÌṩ֧³Ö¡£ÔÚ±¾Ê¾ÀýµÄ Rock Paper Scissors Ó¦ÓóÌÐòÖУ¬ÎÒÃǽ«·¢ËÍÏûÏ¢À´Ö¸Ê¾Íæ¼Ò¶ÔÓÚÌØ¶¨ÓÎϷʵÀýÊÇ·ñÑ¡ÔñÁËʯͷ¡¢²¼»ò¼ôµ¶¡£ÓÉÓÚÎÒÃÇÒÀ¿¿Óû§½»»¥À´È·¶¨·¢ËÍÏûÏ¢µÄÄÚÈÝ£¬ÎÒÃDz»¿ÉÄÜÎÞÏ޵صȴýÐèÒª·¢ËÍÏìÓ¦µÄÇëÇó£¬Òò´Ë£¬ÎÒÃÇʹÓÃÒì²½ TCP ÏûÏ¢À´ÊµÏÖÌØ¶¨ÓÎÏ·µÄͨÐÅ¡£Ò»¸öÈË·¢ËÍÆä¶¯×÷ºóÓ¦ÓóÌÐòÄÍÐĵĵȴý£¬Ö±µ½¶Ô·½Íæ¼Ò·¢ËÍÆä¶¯×÷¡£Äú¿ÉÒÔ½«Õâ¿´×÷ÀàËÆÓÚÏò²Ö¿â·¢ËÍ·¢»õµ¥£¬±ØÐëµÈ´ý£¬Ö±µ½ÓÐÈËÊÖ¶¯°ü×°²ÄÁÏ£¬²ÅÄÜ·¢ËÍÒ»¸öָʾÇëÇóÍê³ÉµÄÏìÓ¦¡£

ÔÚÉÏÃæÏÔʾµÄ ReplyTo ´úÂëÖУ¬¸ø³öÁ˽¨Á¢ TCP ÖÕ½áµãÐèÒªµÄ²¿·Ö´úÂ롣ͨ¹ý SoapReceiver ÀàÖÐµÄ Add ·½·¨£¬¿ÉÒÔ×¢²áÕìÌý´úÂë¡£ÔÚ±¾Ê¾ÀýÖУ¬ÎÒÃÇ´´½¨ÁËÒ»¸öÃûΪ PeerService µÄÀ࣬ËüÊÇÕìÌý´«ÈëµÄ Rock Paper Scissors ÓÎÏ·µÄ SoapReceiver ÀàµÄ×ÓÀà¡£PeerService ÀàÖ»ÊÇÖØÔØÁË´¦Àí´«ÈëÏûÏ¢µÄ Receive ·½·¨¡£¸ÃÀàµÄ´úÂëÈçÏÂËùʾ£º

public class PeerService : SoapReceiver

{

    public static Form1 Form;



    protected override void Receive(SoapEnvelope envelope)

    {

        Form.opponentPlay 

= (char)envelope.GetBodyObject(typeof(char));

        foreach (SecurityToken tok in envelope.Context.Security.Tokens)

        {

if (tok is KerberosToken)

{

    Form.opponent = (KerberosToken)tok;

    break;

}

        }

        Form.OpponentUri = envelope.Context.ReplyTo;

        if (Form.peerToken == null)

Form.peerToken 

    = new KerberosToken("host/" 

        + Form.OpponentUri.Host);

        Form.opposingNameLabel.Invoke(

new Form1.ReceivePlayDelegate(Form.ReceivePlay));

    }

}

Receive ·½·¨²ÉÓà SoapEnvelope ¶ÔÏó×÷Ϊ²ÎÊý¡£SoapEnvelope ÀàÊÇ´Ó XmlDocument ÀàÅÉÉúµÃµ½µÄ£¬ÕâÑù£¬Äú¿ÉÒÔͨ¹ý±ê×¼µÄ XML DOM ½Ó¿ÚÀ´·ÃÎÊ SOAP ÕýÎĺͱêÍ·¡£ÎÒÃÇûÓÐʹÓà DOM ½Ó¿Ú£¬¶øÊÇÀûÓà GetBodyObject ·½·¨»ùÓÚ SOAP ÏûÏ¢ÕýÎÄÖÐµÄ XML À´´´½¨Ò»¸öÀ࣬¸Ã·½·¨ÔÚ¹¦ÄÜÉÏʹÓÃÁË XmlSerializer¡£ÎÒÃǽ«¶¯×÷ÐÅÏ¢±£´æÔÚ Form ÀàµÄÒ»¸ö¹«ÓÐÊôÐÔÖС£

ÎÒÃÇ»¹´ÓÇëÇóÖлñÈ¡ Kerberos ÁîÅÆ²¢½«Ëü±£´æ¡£Ëü½«ÓÃÓÚÒÔºó»ñÈ¡¶ÔÊÖµÄÃû³Æ¡£È»ºó£¬±£´æ¶ÔÊÖµÄ ReplyTo URI£¬ÒÔ±ãÎÒÃÇÁ˽â½ÓÊÕÏìÓ¦µÄµØÖ·¡£ÎÒÃÇÒà¿É»ùÓÚ URI ÖÐÏÔʾµÄÖ÷»úÏÈÐн¨Á¢ Kerberos ÁîÅÆ£¬Ëü½«ÓÃÓÚ¼ÓÃÜ·µ»ØµÄÏûÏ¢¡£

SoapReceivers Ö§³Ö½«ÕìÌý´«ÈëµÄÁ¬½Ó£¬²¢ÔÚÊÕµ½ÏûϢʱµ÷ÓÃָʾµÄÀàµÄ Receive ·½·¨¡£½ø³ÌµÄÏ̳߳ØÖеÄij¸öÏ߳̽«µ÷Óà Receive ·½·¨£¬´ó¶àÊýÇé¿öÏ£¬¸ÃÏ̲߳»ÊÇ´¦ÀíÓ¦ÓóÌÐòÖ÷´°¿ÚÏûÏ¢±ÃµÄÏ̡߳£Òò´Ë£¬ÔÚ Receive ·½·¨µÄĩ⣬ÎÒͨ¹ý Windows ´°ÌåÖеÄÒ»¸ö¿Ø¼þµ÷Óà Invoke ·½·¨¡£Õâ¾ÍÆô¶¯ÁËÖ÷´°¿ÚÏß³ÌÖÐÖ¸¶¨µÄίÍй¦ÄÜ£¬ÒÔʹ´°ÌåÖи÷ÖֿؼþµÄ³£¹æ½»»¥ÕýÈ·½øÐС£ÔÚ±¾Ê¾ÀýÖУ¬Î¯ÍÐÈ·¶¨Á½´Î¶¯×÷ºóµÄÓ®¼Ò²¢ÏàÓ¦µØ¸üÐÂÓû§½çÃæ¡£

µ±µ÷Óà SoapReceivers.Add ·½·¨£¨ÏÂÃæÔÙ´ÎÏÔʾÁ˸÷½·¨£©Ê±£¬ÎÒÃÇ´«µÝÁ½¸ö²ÎÊý£ºÒ»¸ö URI ºÍÕìÌýÀàµÄÀà±ðÀàÐÍ¡£URI ָʾÁ˶àÏîÄÚÈÝ¡£Ê×ÏÈ£¬URI ÀàÐÍΪ soap.tcp¡£Õâ±íʾËüÊÇÒ»¸öͨ¹ý TCP ·¢Ë굀 SOAP ÏûÏ¢µÄ URI¡£URI µÄÖ÷»úÃû³ÆÖ¸Ê¾ÒªÕìÌýµÄ¼ÆËã»ú£¬ÆäºóÊÇÓÃÀ´ÕìÌý´«ÈëÁ¬½ÓµÄ TCP ¶Ë¿ÚºÅ¡£ÔÚ±¾Ê¾ÀýÖУ¬ÎÒÃÇʹÓÃ¶Ë¿Ú 3131¡£×îºÃ²»ÒªÊ¹Óà 1000 ÒÔϵĶ˿ںţ¬ÒòΪËüÃÇÊÇÎªÌØ¶¨ÀàÐ͵ÄÓ¦ÓóÌÐò¶ø±£ÁôµÄ£¨ÀýÈ磬¶Ë¿Ú 80 ÓÃÓÚ HTTP ·þÎñÆ÷£©¡£

myPeerUri 

    = new Uri("soap.tcp://" 

      + System.Net.Dns.GetHostName() 

      + ":3131/RPSPeer1");

SoapReceivers.Add(myPeerUri, typeof(PeerService));

ÏòÒì²½ TCP ÕìÌýÆ÷·¢ËÍÏûϢҲͬÑù¼òµ¥¡£ÎÒÃÇÖ»Òª´´½¨Ò»¸ö SoapEnvelope ¶ÔÏ󣬲¢Ê¹Óà SetBodyObject ·½·¨½«¶ÔÏóÐòÁл¯µ½ÕýÎÄµÄ XML ÖС£SoapEnvelope °üº¬Ò»¸ö Context ÊôÐÔ£¬¸ÃÊôÐÔµÄʹÓÃÀàËÆÓÚ³£¹æ HTTP °ó¶¨µÄ SOAP ½»»¥Ê±Ê¹ÓÃµÄ SoapRequestContext ºÍ SoapResponseContext ÊôÐÔ¡£ÎÒÃÇÓÃËüÀ´½¨Á¢ÐèÒªµÄ Action SOAP ±êÍ·ºÍ¿ÉÑ¡µÄ ReplyTo ±êÍ·¡£ÎÒÃÇ»¹ÒªÌí¼ÓÇ°Ãæ´´½¨µÄ Kerberos ÁîÅÆ²¢ÓÃËüÀ´¼ÓÃÜÏûÏ¢¡£¶ÔÓÚ·¢ËÍÏûÏ¢£¬ÎÒÃÇʹÓà SoapSender À࣬¸ÃÀàÓëÎÒÃÇÓÃÓÚÕìÌý´«ÈëÏûÏ¢µÄ SoapReceiver ÀàÏà¶ÔÓ¦¡£SoapSender Àà»ñÈ¡Æä¹¹Ô캯ÊýÖеÄÖÕ½áµã URI£¬È»ºó½«´«µÝµÄ SoapEnvelope ·¢Ë͵½ Send ·½·¨¡£·¢ËͶԵÈÏûÏ¢µÄ´úÂëÈçÏÂËùʾ¡£

// Send Message

SoapEnvelope envelope = new SoapEnvelope();

envelope.SetBodyObject(myPlay);

envelope.Context.Action = new Action(OpponentUri.ToString());

envelope.Context.Security.Tokens.Add(peerToken);

envelope.Context.Security.Elements.Add(

    new EncryptedData(peerToken));

envelope.Context.ReplyTo = myPeerUri;

SoapSender peerProxy = new SoapSender(this.OpponentUri);

peerProxy.Send(envelope);

Äú¿ÉÒÔ´Ó Microsoft Download Center »ñÈ¡ Rock Paper Scissors Ó¦ÓóÌÐòµÄÍêÕûÔ´´úÂ루ӢÎÄ£©¡£

WSE 2.0 µÄÆäËû¹¦ÄÜ

ͨ¹ý Rock Paper Scissors Ó¦ÓóÌÐò£¬ÎÒÃÇÑо¿ÁË WSE 2.0 µÄÐí¶à¹¦ÄÜ£¬µ«ÊÇ»¹ÓÐÐí¶àÆäËû¹¦ÄÜ¡£Óû§ÃûÁîÅÆ»¹¿ÉÒÔÓë Windows °²È«ÐÔ¼¯³É£¬Èç Kerberos ÁîÅÆ¡£ÓÉÓÚÖ§³Ö°²È«ÉÏÏÂÎÄÁîÅÆ£¬Äú¿ÉÒÔ½¨Á¢ÓÐЧµÄ¶Ô³ÆÃÜÔ¿£¬ÓÃÓÚ¶ÔÁ½¸öÖÕ½áµãÖ®¼äµÄ¶à¸öÏûÏ¢½øÐмÓÃÜ£¬¶øÎÞÐèΪÿ¸öÏûÏ¢Éú³ÉÒ»¸öеÄÃÜÔ¿¡£³ýÁ˰²È«ÉÏÏÂÎÄÁîÅÆÒÔÍ⣬»¹Ö§³Ö´´½¨°²È«ÐÔÁîÅÆ·þÎñ (Security Token Service)£¬¸Ã·þÎñΪÁ½¸öÖÕ½áµãÖ®¼äµÄͨÐŰ䷢ÉÏÏÂÎÄÁîÅÆ¡£

¶ÔÓÚÏûÏ¢´¦Àí£¬ÎÒÃǽöÌÖÂÛÁ˶Է¢ËÍÒì²½ TCP ÏûÏ¢µÄÖ§³Ö£¬Æäʵ¶Ôͬ²½ÇëÇó/ÏìÓ¦µÄÖ§³ÖÒ²ÊÇͬÑù³öÉ«¡£¸ÃÖ§³ÖʹÓà SoapMethod ÊôÐÔ£¬ÀàËÆÓÃÓÚ .asmx Web ·þÎñµÄ WebMethod ÊôÐÔ£¬¶øÇÒ²Ù×÷Ò²ÏàËÆ¡£´ËÍ⻹֧³ÖÔÚµ¥¶ÀµÄÓ¦ÓóÌÐò¿Õ¼äÖе÷Ó÷þÎñ£¬ÕâËÆºõ²»ÊǺܺ㬵« Windows ÏûÏ¢±Ã£¨´´½¨´°Ê½Ó¦ÓóÌÐòµÄ»ù´¡£©Í¬Ñù»ùÓÚÔÚµ¥¶ÀµÄÓ¦ÓóÌÐò¿Õ¼äÖз¢ËÍÏûÏ¢¡£

WSE 2.0 ¸üΪÎüÒýÈ˵ĵط½Ö®Ò»ÊǾßÓÐÐí¶à¿ÉÀ©Õ¹µã¡£Äú¿ÉÒÔ×öÈκÎÊÂÇ飬°üÀ¨´Ó´´½¨×Ô¼ºµÄ×Ô¶¨ÒåÁîÅÆ´¦Àí³ÌÐòµ½Ìí¼Ó×Ô¼ºµÄ²ßÂÔÖ§³Ö¡£Ïñ WSE 1.0 Ò»Ñù£¬ÄúÈÔÈ»¿ÉÒÔÀ©´ó´¦Àí·¶Î§£¬µ«¸üÖØÒªµÄÊÇÈçºÎÔÚ¸ü¸ßµÄ²ã´ÎÉÏǰ½ø²¢ÀûÓÃÒÑÓеŤ×÷¡£

С½á

ÔÚ MSDN ÖУ¬½«»áÓиü¶àµÄÎÄÕÂÉîÈë̽ÌÖ WSE 2.0¡£ÎÒÃǽ«ÉîÈëµØÌÖÂÛ²ßÂÔ¡¢°²È«ÐÔ¡¢ÏûÏ¢´¦ÀíºÍÆäËûÄÚÈÝ¡£Ï£Íû Rock Paper Scissors ΪÄúչʾÁËʹÓà WSE 2.0 ¿ª·¢µÄ¸ß¼¶ Web ·þÎñÖ§³ÖËù¾ßÓеÄÒ»Ð©ÆæÌØÐ¹¦ÄÜ¡£Í¬Ê±Ï£ÍûËüÄÜÏñÒý·¢ÎÒÃÇÒ»ÑùÒý·¢ÄúµÄÏëÏóÁ¦£¬ÔÚÈ«ÐµĻ·¾³Öпª·¢ Web ·þÎñÓ¦ÓóÌÐò¡£


ÉÏһƪ£ºXml WebServiceÍêȫʵÀý½âÎö(ËÄ)
ÏÂһƪ£ºÃ»ÓÐÁË
×îÐÂÆÀÂÛ¹²ÓÐ 0 Î»ÍøÓÑ·¢±íÁËÆÀÂÛ
·¢±íÆÀÂÛ
ÆÀÂÛÄÚÈÝ£º²»Äܳ¬¹ý250×Ö£¬ÐèÉóºË£¬Çë×Ô¾õ×ñÊØ»¥ÁªÍøÏà¹ØÕþ²ß·¨¹æ¡£
Óû§Ãû£º ÃÜÂ룺
ÄäÃû?
×¢²á
ÔÞÖúÉÌÁ¬½Ó