Как указано в статье this, в .net можно связать веб-службу со всеми IP-адресами, используя «адрес» 0. Однако это, похоже, не работает с моно (версия 2.10.8.1).Моно и WCF Net.Tcp Связывание во всех IP-адресах
Вот мой пример кода:
Клиент:
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 (Raspberry Pi, Debian soft-float) сервис запускается без каких-либо проблем, однако клиент не может подключиться.
Если я размещаю услугу с ее IP-адресом, а не с адресом «0», все работает правильно.
Это просто еще одна ошибка в моно или мне нужно привязать к любому другому ip-адресу вместо 0? Если это ошибка в моно, есть ли какие-нибудь обходные пути?
(Кстати, я все еще ищет для обхода проблем совместного использования порта с моно/net.tcp, если кто-то может помочь здесь ->net.tcp port sharing and mono)
С * вместо 0 я получаю: 'необработанное исключение: System.Net.Sockets.SocketException: Нет такого хозяина не known', С + я получаю:' Необработанное исключение: System.UriFormatException: Invalid URI: Имя хоста не удалось разобрать. ' – bema
Вместо этого попробуйте' 0.0.0.0'. – PhonicUK
с 0.0.0.0 Я получаю: 'Unhandled Exception: System.ArgumentException: Адреса 0.0.0.0 (IPv4) и :: 0 (IPv6) являются неуказанными адресами. Вы не можете использовать их в качестве целевого адреса. «Спасибо за ваш очень быстрый ответ кстати :) – bema