使用Eneter通信框架实现Silverlight与桌面应用的TCP通信

在本文中,将探讨如何使用Eneter Messaging Framework来实现Silverlight应用程序与独立桌面应用程序之间的文本消息传输。Eneter Messaging Framework是一个免费的框架,可以通过下载,并且可以在找到开发者的在线帮助。

Silverlight与TCP连接的特定要求

在Silverlight应用程序中使用TCP连接时,需要特别注意以下几点:

  • Silverlight框架需要政策服务器(Policy Server)。
  • Silverlight框架只允许使用端口范围4502-4532。

政策服务器(Policy Server)

政策服务器是一个特殊服务,监听在端口943上。该服务接收'<policy-file-request/>'请求,并响应策略文件,该文件指定了谁被允许进行通信。当Silverlight创建TCP连接时,它会自动使用此服务。它在端口943上发送请求,并期望策略文件。如果政策服务器不存在或策略文件的内容不允许通信,则不会创建TCP连接。

Eneter Messaging Framework

Eneter Messaging Framework封装了低级套接字通信,并为TCP通信提供了方便的API。它还为提供了政策服务器。因此,实现非常简单。以下是示例代码:

桌面应用程序负责启动政策服务器并接收消息。以下是完整的实现代码:

using System; using Eneter.Messaging.EndPoints.StringMessages; using Eneter.Messaging.MessagingSystems.MessagingSystemBase; using Eneter.Messaging.MessagingSystems.TcpMessagingSystem; namespace Receiver { class Program { static void Main(string[] args) { // 启动政策服务器,允许Silverlight通过TCP进行通信。 TcpPolicyServer aPolicyServer = new TcpPolicyServer(); aPolicyServer.StartPolicyServer(); // 创建字符串消息的接收器。 IStringMessagesFactory aStringMessageReceiverFactory = new StringMessagesFactory(); IStringMessageReceiver aStringMessageReceiver = aStringMessageReceiverFactory.CreateStringMessageReceiver(); aStringMessageReceiver.MessageReceived += StringMessageReceived; // 创建TCP监听通道。 // 注意:Silverlight只支持端口范围4502-4532 IMessagingSystemFactory aTcpMessagingFactory = new TcpMessagingSystemFactory(); IInputChannel anInputChannel = aTcpMessagingFactory.CreateInputChannel("127.0.0.1:4502"); // 将输入通道附加到字符串消息接收器并开始监听。 Console.WriteLine("Receiver is listening."); aStringMessageReceiver.AttachInputChannel(anInputChannel); } static void StringMessageReceived(object sender, StringMessageEventArgs e) { // 处理接收到的消息。 Console.WriteLine(e.Message); } } } using System.Windows; using System.Windows.Controls; using Eneter.Messaging.EndPoints.StringMessages; using Eneter.Messaging.MessagingSystems.MessagingSystemBase; using Eneter.Messaging.MessagingSystems.TcpMessagingSystem; namespace SilverlightApplication { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); // 创建字符串消息的发送器。 IStringMessagesFactory aStringMessageReceiverFactory = new StringMessagesFactory(); myStringMessageSender = aStringMessageReceiverFactory.CreateStringMessageSender(); // 创建通过TCP发送的输出通道。 // 注意1:Silverlight只支持端口范围4502-4532 IMessagingSystemFactory aTcpMessagingFactory = new TcpMessagingSystemFactory(); IOutputChannel anOutputChannel = aTcpMessagingFactory.CreateOutputChannel("127.0.0.1:4502"); // 将输出通道附加到字符串消息发送器,以便通过TCP发送消息。 myStringMessageSender.AttachOutputChannel(anOutputChannel); } // 当按钮被点击时发送消息。 private void button1_Click(object sender, RoutedEventArgs e) { string aMessage = textBox1.Text; myStringMessageSender.SendMessage(aMessage); } private IStringMessageSender myStringMessageSender; } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485