单声道和WCF网.Tcp所有IP地址绑定
本文关键字:所有 Tcp IP 地址 绑定 WCF 声道 单声道 | 更新日期: 2023-09-27 18:09:31
如本文所述,在。net中可以使用"address" 0将web服务绑定到所有ip地址。然而,这似乎不适用于mono(2.10.8.1版本)。
下面是我的示例代码: 客户:string ipAddressOfTheService = "192.168.0.23";
EndpointAddress address = new EndpointAddress(string.Format("net.tcp://{0}:8081/myService", ipAddressOfTheService));
NetTcpBinding binding = new NetTcpBinding();
ServiceProxy proxy = new ServiceProxy(binding, address);
if(proxy.CheckConnection())
{
MessageBox.Show("Service is available");
}
else
{
MessageBox.Show("Service is not available");
}
ServiceProxy:
public class ServiceProxy : ClientBase<IMyService>, IMyService
{
public ServiceProxy(Binding binding, EndpointAddress address)
: base(binding, address)
{
}
public bool CheckConnection()
{
bool isConnected = false;
try
{
isConnected = Channel.CheckConnection();
}
catch (Exception)
{
}
return isConnected;
}
}
IMyService:
[ServiceContract]
public interface IMyService
{
[OperationContract]
bool CheckConnection();
}
MyService:
class MyService : IMyService
{
public bool CheckConnection()
{
Console.WriteLine("Check requested!");
return true;
}
}
ServiceHost:
class MyServiceHost
{
static void Main(string[] args)
{
Uri baseAddress = new Uri(string.Format("net.tcp://0:8081/myService");
using (ServiceHost host = new ServiceHost(typeof(MonitoringService), baseAddress))
{
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.None;
host.AddServiceEndpoint(typeof(IMyService), binding, baseAddress);
host.Open();
Console.WriteLine("The service is ready at {0}", baseAddress);
Console.WriteLine("Press <Enter> to stop the service.");
Console.ReadLine();
host.Close();
}
}
}
如果我在windows PC上使用。net运行这个(服务和客户端),一切都很好。
在我的Linux机器上(树莓派,Debian软浮动),服务启动没有任何问题,但是客户端无法连接。如果我用它的ip地址而不是"0"地址来托管服务,一切都能正常工作。
这只是另一个bug在单声道还是我必须绑定到任何其他ip地址而不是0?如果是单声道的bug,有什么解决办法吗?
(顺便说一下,我仍然在寻找一个解决方案与mono/net端口共享问题。Tcp,如果有人能帮忙的话-> net。TCP端口共享和mono)
尝试使用+
或*
而不是0
来绑定所有地址
编辑:或者试试0.0.0.0
编辑2:看起来像一个bug在Mono。您可以在https://bugzilla.xamarin.com/index.cgi
我在Ubuntu Server 16.04 LTS中遇到了类似的问题;Mono JIT编译器版本5.0.1.1(2017-02-5077205星期四5月25日09:19:18 UTC 2017).
我通过在/etc/hosts
中添加以下行来解决这个问题:
0.0.0.0 IP4Any
当然,还要绑定IP4Any
。
让WCF在Mono上通过netttcpbinding工作的教程
要在Mono中使用WCF的IP地址,您需要在/etc/hosts. .文件中写入域名这样你就可以使用IP地址来连接主机和客户端。
如何写domain:在主机上打开/etc/hosts文件,添加IP.address.of.host HostName