所有IP地址上的Mono和WCF Net.Tcp绑定

时间:2013-04-17 09:44:23

标签: c# wcf mono net.tcp

this文章中所述,在.net中,可以使用“地址”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();
}

我的服务:

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();
        }
    }
}

如果我在使用.net的Windows PC上运行此服务(客户端),一切正常 在我的Linux机器(Raspberry Pi,Debian soft-float)上,服务启动没有任何问题,但客户端无法连接。
如果我使用其IP地址而不是“0”地址来托管服务,一切正常。

这只是单声道中的另一个错误还是我必须绑定到任何其他IP地址而不是0? 如果它是单声道的错误,有任何解决方法吗?

(顺便说一句,我还在寻找使用mono / net.tcp端口共享问题的解决方法,如果有人可以提供帮助 - > net.tcp port sharing and mono < / p>

2 个答案:

答案 0 :(得分:0)

尝试使用+*代替0绑定到所有地址。

修改:或尝试0.0.0.0

Edit2:看起来像是Mono中的一个错误。您可以在https://bugzilla.xamarin.com/index.cgi

报告

答案 1 :(得分:0)

我在Ubuntu Server 16.04 LTS&amp; amp; Mono JIT编译器版本5.0.1.1(2017年5月25日星期五09:19:18 UTC)。

我通过在/etc/hosts中添加以下行来解决问题:

0.0.0.0 IP4Any

然后,将服务绑定到IP4Any