您现在的位置: IT专家网 > WinSystem子站 > 技巧
利用Vista和WCF中强大P2P通信功能
作者: Justin Smith, 出处:微软, 责任编辑: 韩博颖,
2008-05-23 11:02
Windows Vista 中的 P2P 开发是一个极其广泛的主题。因此,我不会去尝试完成这样一个不可能的任务,而是会介绍 Windows Vista 中一些不同的 P2P 技术。
在定义了我们的服务合约后,现在就该添加 Windows Communication Foundation 代码,该代码会将我们的应用程序连接到 PeerChannel 网格并且被动等待来自网格的消息。首先,在窗体中实现新定义的服务合约。然后,定义类型 ServiceHost 的字段。所接收的消息将被发送到 frmPictureViewer 类型的单个实例。要表明此功能,我必须将正确的 ServiceBehavior 分配给 frmPictureViewer 类型。这两个步骤如下所示。
实施服务合同
| [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] public partial class frmPictureViewer : Form, IPictureViewer { // 托管接收者 ServiceHost host; // 接收消息时将要调用的方法 public void SharePicture(Stream stream) { // 获取图像 Image image = Bitmap.FromStream(stream); // 在窗体的图片框中显示图像 pbView.SizeMode = PictureBoxSizeMode.StretchImage; pbView.Image = image; } ... // 为清晰起见省略其他成员 } |
尝试加入网格和侦听消息
| public frmPictureViewer() { InitializeComponent(); StartReceiving(); } private void StartReceiving() { // 定义网格名并设置与 PNRP 解析器的 // 对等绑定 Uri meshAddress = new Uri("net.p2p://pictureView"); NetPeerTcpBinding binding = new NetPeerTcpBinding(); binding.Resolver.Mode = PeerResolverMode.Pnrp; binding.Security.Transport.CredentialType = PeerTransportCredentialType.Password; binding.MaxReceivedMessageSize = 700000L; host = new ServiceHost(this); host.AddServiceEndpoint(typeof(IPictureViewer), binding, meshAddress); // 定义密码并获取数字签名证书 host.Credentials.Peer.MeshPassword = "JustinSmith"; host.Credentials.Peer.Certificate = GetCertificate(); // 尝试联结和侦听消息 host.Open(); } |

