在本文中,将探讨如何使用Eneter Messaging Framework来实现Silverlight应用程序与独立桌面应用程序之间的文本消息传输。Eneter Messaging Framework是一个免费的框架,可以通过下载,并且可以在找到开发者的在线帮助。
在Silverlight应用程序中使用TCP连接时,需要特别注意以下几点:
政策服务器是一个特殊服务,监听在端口943上。该服务接收'<policy-file-request/>'请求,并响应策略文件,该文件指定了谁被允许进行通信。当Silverlight创建TCP连接时,它会自动使用此服务。它在端口943上发送请求,并期望策略文件。如果政策服务器不存在或策略文件的内容不允许通信,则不会创建TCP连接。
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;
    }
}