利用Vista和WCF中强大P2P通信功能
2008-05-27 17:19:12 来源:WEB开发网实施服务合同
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
publicpartialclassfrmPictureViewer:Form,IPictureViewer
{
//托管接收者
ServiceHosthost;
//接收消息时将要调用的方法
publicvoidSharePicture(Streamstream)
{
//获取图像
Imageimage=Bitmap.FromStream(stream);
//在窗体的图片框中显示图像
pbView.SizeMode=PictureBoxSizeMode.StretchImage;
pbView.Image=image;
}
...//为清晰起见省略其他成员
}
接下来,我必须对 ServiceHost 进行实例化,添加端点并开始侦听外来的消息。由于我正在构建 Windows 窗体应用程序,因此实现此操作的逻辑位置就是窗体的构造函数,如下所示。
尝试加入网格和侦听消息
publicfrmPictureViewer()
{
InitializeComponent();
StartReceiving();
}
privatevoidStartReceiving()
{
//定义网格名并设置与PNRP解析器的
//对等绑定
UrimeshAddress=newUri("net.p2p://pictureView");
NetPeerTcpBindingbinding=newNetPeerTcpBinding();
binding.Resolver.Mode=PeerResolverMode.Pnrp;
binding.Security.Transport.CredentialType=
PeerTransportCredentialType.Password;
binding.MaxReceivedMessageSize=700000L;
host=newServiceHost(this);
host.AddServiceEndpoint(typeof(IPictureViewer),binding,
meshAddress);
//定义密码并获取数字签名证书
host.Credentials.Peer.MeshPassword="JustinSmith";
host.Credentials.Peer.Certificate=GetCertificate();
//尝试联结和侦听消息
host.Open();
}
此时,我已经完成了要连接到网格并侦听消息所需的所有步骤。与标准的 Windows Communication Foundation 代码相比,不同之处只在于 Uri 的方案 (net.p2p)、所使用的绑定 (NetPeerTcpBinding) 以及所增添的基于密码的安全性。请注意,我已选择将网格密码直接置于代码中,这一点很重要。如果想要使网格密码保密,请不要在您当前所使用的应用程序中如此操作。
更多精彩
赞助商链接