¡@¡@¡@³¡@¡@ ReplyTo ¡@Úò¡@¡@Ë¡@¡@¡@¡@ TCP ·É¾×íå´fðE¡@³õ¡@¡@Úò¡@¡@¡@ SoapReceiver ºN¡@¡@ Add ¡@Úu¡@¡@¡@¡@¡@¯s¡@¡@Úò¡@¡@¡@¡@££¡@¡@¡@¡@©Ó¡@¡@¡@¡@¡@¡@ PeerService ¡@ºN¡@¡@Öv¯s¡@¨{¡@¡@ Rock Paper Scissors §øÄæ¡@ SoapReceiver ºN¡@¡@ºN¡@PeerService ºN¡@Öv¡@§ó¡@¡@í~¨{¡@¡@¡@¡@ Receive ¡@Úu¡@ÆBºN¡@¡@Úò¡@¡@¡@¡@¡@
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 ¡@Úu¡@¡@ SoapEnvelope ¬ÑæÎ¡@¡@§âp¡@SoapEnvelope ºNÖv¡@ XmlDocument ºN¡@¡@¡@¡@¡@¡@¡@§²¡@¡@¡@¡@¡@¡@§¨¡@¡@ XML DOM ¾X¡@£¤Ïî«ô SOAP ¡@¡@¢Q§¨ò³¡@¡@¡@¡é£V£~¡@ DOM ¾X¡@¡@£nÖv¡@¡@ GetBodyObject ¡@Úu»H¡@ SOAP ¡@¡@¡@¡@¡@¡@ XML £¤©Ó¡@¡@¡@ºN¡@ÆB¡@Úu¡@¡@¡@¡@£~¡@¡@ XmlSerializer¡@¡@¡@¡@¯¹¡@á¡@÷ç¡@¡@ Form ºN¡@¡@¡@¡@£V©g¡@¡@¡@
¡@¡@Á{¡@¥s¡@¡@²ú¡@ Kerberos ¡@¡@¡@¡@¡@÷ç¡@¡@¡@¡@¡@¡@¡@¡@²ú¡@¬Ñ¡@¡@¡@¼K¡@ò~¡@¡@÷ç¡@¬Ñ¡@¡@ ReplyTo URI¡@¡@ôm¡@¡@¡@µz¾X£O¡@µÜ¡@¡@¡@¡@¡@¡@¡@¡@»H¡@ URI ¡@³¡@¡@¡@¼f¡@¡o¡@¡@ Kerberos ¡@¡@¡@¡@¡@¡@¡@¡@·ø¡@¡@¡@¡@¡@¡@
SoapReceivers ¡@¡@¡@¯s¡@¨{¡@¡@Ö³¾X¡@¡@¡@£O¡@¡@¡@¡@ÖÅ¡@¡@¡@¡@ºN¡@ Receive ¡@Úu¡@ªÄ¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@ÖÅ¡@ Receive ¡@Úu¡@¡@¡@pÁ¡Úx¡@¡@ÆB¡@¡@¡@Öv¡@í~µÜ¡@¡@¡@¡@«å¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@ Receive ¡@Úu¡@¡@¡@¡@¡@¡@¡@ Windows «åçj¡@¡@¡@¡@¥_¡@ÖÅ¡@ Invoke ¡@Úu¡@¡@âò¹ô¯¹¡@¡@«å¡@¡@¡@¡@¡@¡~¡@¡@£N¡@¡@¡@¡@£~«åçj¡@¡@¾P¥_¡@¡@¡@Ïï¡@¡@¡@맪ġo¡@¡@¡@¡@££¡@¡@¡@£Në§¡~£³£[¯¹¡@¡@¡@¹Ó²£¡@¡@µÜ¡@¡@¡@¡@¡@¡@¡@¡@
¿ØÖÅ¡@ SoapReceivers.Add ¡@Úu¡@¡@¡@¡@£[³¡@¡@ÆB¡@Úu¡@¡@¡@¡@¡@¨{±w£³¡@§âp¡@¡@¡@ URI ¢Q¯s¡@ºN¡@ºN¡@ºN¡@¡@URI ¡@¡@¡@¡@°Â¡@¡@¡@¡@¡@¡@URI ºN¡@¡@ soap.tcp¡@¡@¡@¡@¡@Öv¡@¡@¡@¡@ TCP ¬é¡@¡@ SOAP ¡@¡@¡@ URI¡@URI ¡@¡@¼f¡@¼K¡@¡@ðE¯s¡@¡@ð@¿Å¼f¡@£µ¡@Öv¡@£¤¯s¡@¨{¡@Ö³¾X¡@ TCP ¬½¡@¸¡¡@¡@¡@¡@££¡@¡@¡@¡@£~¡@¬½¡@ 3131¡@µ{¡@¡@ðE£~¡@ 1000 ¡@¡@¡@¬½¡@¸¡¡@¡@¡@¡@¡@Öv¡@¡@¡~ºN¡@¡@µÜ¡@¡@¡@£n÷çµj¡@¡@££¡@¡@¬½¡@ 80 ¡@¡@ HTTP ¡@¥z³º¡@¡@
myPeerUri
= new Uri("soap.tcp://"
+ System.Net.Dns.GetHostName()
+ ":3131/RPSPeer1");
SoapReceivers.Add(myPeerUri, typeof(PeerService));
¡@°ø£» TCP ¯s¡@³º¬é¡@¡@¡@¡@¡@§²¸¸¦ä¡@¡@¡@¡@ðE©Ó¡@¡@¡@ SoapEnvelope ¬ÑæÎ¡@¡@£~¡@ SetBodyObject ¡@Úu¡@¬ÑæÎ¡@¡@¡@¡@¡@¡@¡@ XML ¡@¡@SoapEnvelope ¡@¡@¡@¡@ Context ©g¡@¡@ÆB©g¡@¡@£~¡@ºN¡@¡@¡@Ïï HTTP ¡@¡~¡@ SOAP ¡@¡@¡@£~¡@¡@ SoapRequestContext ¢Q SoapResponseContext ©g¡@¡@¡@¡@¡@¡@£¤¡@¡@´fðE¡@ Action SOAP §¨ò³¢Q¡@¦J¡@ ReplyTo §¨ò³¡@¡@¡@Á{ðE¡@¡@Íg¡@©Ó¡@¡@ Kerberos ¡@¡@¡@¡@¡@£¤¡@·ø¡@¡@¡@¬Ñ¡@¬é¡@¡@¡@¡@¡@¡@£~¡@ SoapSender ºN¡@ÆBºN¡@¡@¡@¡@¡@¯s¡@¨{¡@¡@¡@¡@ SoapReceiver ºN¡@¬ÑµÜ¡@SoapSender ºN²ú¡@£µ¯k¡@£¸p¡@¡@·É¾×íå URI¡@ò~¡@¡@¨{±w¡@ SoapEnvelope ¬é¡@¡@ Send ¡@Úu¡@¬é¡@¬Ñ³æ¡@¡@¡@¡@Úò¡@¡@¡@¡@¡@
// 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 µÜ¡@¡@¡@¡@¡@Ѥè¡@Úò¡@¿Y¡@¡@¡@
WSE 2.0 ¡@£µ¡@¡@¡@
¡@¡@ Rock Paper Scissors µÜ¡@¡@¡@¡@¡@¡@¡@¢£¡@ WSE 2.0 ¡@¡@¡@¡@¡@¡@¡@ÖvÁ{£V¡@¡@£µ¡@¡@¡@¡@¡@¡@¡@¡@¡@Á{¡@¡@¡@ Windows ¡@¡@¡@´É£K¡@¡@ Kerberos ¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@£V¡@¡@¬Ñ¼K·ø¡@¡@¡@¡@¬Ñ£³¡@·É¾×íå¡@¤B¡@¡@¡@¡@¡@ªÄ¡o¡@·ø¡@£n¡@´f¡@¡V¡@¡@¡@¡@£K¡@¡@¡@¡@·ø¡@¡@®J¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@Á{¡@¡@©Ó¡@¡@¡@¡@¡@¡@¡@¥z (Security Token Service)¡@ÆB¡@¥z¡@£³¡@·É¾×íå¡@¤B¡@¡@áºà¬é¡@¡@¡@¡@¡@¡@
¬Ñ¡@¡@¡@¡@í~¡@¡@¡@«×ðP¶¥¡@¬Ñ¬é¡@°ø£» TCP ¡@¡@¡@¡@¡@¡@£µÀt¬Ñ¡@£»¥s¡@/¡@µÜ¡@¡@¡@¡@Öv¡@§²¡@¡g¡@ÆB¡@¡@£~¡@ SoapMethod ©g¡@¡@ºN¡@¡@¡@ .asmx Web ¡@¥z¡@ WebMethod ©g¡@¡@£n¡@¥¨¡@¡@¡@¡@¡@¡@¡@Á{¡@¡@¡@¦äêÌ¡@µÜ¡@¡@¡@¡@¤B¡@ÖÅ¡@¡@¥z¡@¡@¡@¡@¡@Öv¡@¡@¡@¡@ Windows ¡@¡@¡@¡@©Ó¡@«å£DµÜ¡@¡@¡@¡@»H°ú¡@¡@§²»H¡@¡@¦äêÌ¡@µÜ¡@¡@¡@¡@¤B¡@¬é¡@¡@¡@¡@
WSE 2.0 ¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@Öv£´£V¡@¡@¡@ÐR¡@íå¡@¡@¡@¡@·t¡@¡@£uÁ¡¡@¡@¡@¡@©Ó¡@¡@¡@¡@¡@¡~¡@¡@¡@¡@í~¡@¡@¡@¡@¡@¡@¡@¡@èXµÔ¡@¡@¡@¹_ WSE 1.0 ¡@§²¡@¡@¡@ò~¡@¡@ÐR¡@¡@í~¡@âä¡@¡@¡@¡@ðE¡@Öv¡@¡@¡@¡@ħ¡@ù¤£[¡@ÍgªÄ¡@¡@¡@¡@£V¡@¡@¡@¡@
¡@¡@¡@¡@
3¡@,¿ØÍg¡@§÷
3¡@
1 2 3