我有一个Windows Services作为发布服务器运行,我正在尝试将Xamarin Forms设置为订户。下面的代码在Console App或LinqPad中可以正常工作,但是当将其复制并粘贴到Xamarin Forms中时,SubscriberSocket不会响应来自服务器的消息。
你知道如何连接吗?
我正在使用NetMQ v 4.0.0.1
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
Task.Run(() => StartPubSubSocketSubscriber());
}
private void StartPubSubSocketSubscriber()
{
string topic = "TopicA";
using (var subSocket = new SubscriberSocket())
{
subSocket.Options.ReceiveHighWatermark = 1000;
subSocket.Connect("tcp://192.168.30.120:5556");
subSocket.Subscribe(topic);
while (true)
{
string messageTopicReceived = subSocket.ReceiveFrameString();
string messageReceived = subSocket.ReceiveFrameString();
Device.BeginInvokeOnMainThread(() =>
{
label.Text = messageReceived;
});
}
}
}
}
我还尝试使用Task.Factory.StartNew(() => StartPubSubSocketSubscriber(), TaskCreationOptions.LongRunning);
启动后台线程,但是它对发布者的消息没有响应。
谢谢。
PS .:已删除 subSocket.Connect(“ tcp:// localhost:5556”);
答案 0 :(得分:0)
解决此问题的过程分为两个步骤:
SubscriberSocket
错误地指向localhost
。这是一个可以理解的错误,因为仿真器与服务器应用程序在同一台计算机上运行。在虚拟环境或其他设备上运行时,请确保订阅服务器具有明确的IP地址。SubscriberSocket
没有响应的问题实际上是在服务器上。一旦将其更改为pubSocket.Bind("tcp://localhost:5556");
,我就用pubSocket.Bind("tcp://*:5556");
进行了设置,SubscriberSocket开始响应。这是文档中的错误。该解决方案的提示来自NetMQ github问题跟踪: https://github.com/zeromq/netmq/issues/747