2014-06-14 51 views
0

我有一个Azure虚拟机正在运行,并且在Windows服务中我编写了一个WCF TCP端点以及一个MEX HTTP端点:无法在Azure虚拟机上打开TCP通道

private void OpenTCPChannel() 
    { 
     string fqdn = System.Net.Dns.GetHostEntry("localhost").HostName; 
     NetTcpBinding binding = new NetTcpBinding(SecurityMode.None, true); 
     binding.SendTimeout = new TimeSpan(0, 1, 0); 
     binding.ReceiveTimeout = new TimeSpan(0, 1, 0); 
     binding.MaxReceivedMessageSize = int.MaxValue; 
     binding.MaxConnections = int.MaxValue; 
     binding.ListenBacklog = int.MaxValue; 
     binding.ReliableSession.Enabled = true; 
     binding.ReliableSession.Ordered = true; 
     binding.ReliableSession.InactivityTimeout = new TimeSpan(0, 1, 0); 
     Uri serviceAddress = new Uri(String.Format("net.tcp://{0}:{1}/GameServer", fqdn, Properties.Settings.Default["GameServerPort"])); 
     ServiceHost serviceHost = new ServiceHost(service, serviceAddress); 
     serviceHost.AddServiceEndpoint(typeof(IGameService), binding, serviceAddress); 
     ServiceMetadataBehavior metadataExchange = new ServiceMetadataBehavior(); 
     metadataExchange.HttpGetEnabled = true; 
     metadataExchange.HttpGetUrl = new Uri(string.Format("http://{0}:{1}/GameServer", fqdn, Properties.Settings.Default["MEXPort"])); 
     serviceHost.Description.Behaviors.Add(metadataExchange); 
     serviceHost.Open(); 
     log.WriteEntry(String.Format("Successfully started TCP endpoint at {0}.", serviceAddress.ToString())); 
     log.WriteEntry(String.Format("Successfully started MEX endpoint at {0}.", metadataExchange.HttpGetUrl.ToString())); 
    } 

当我在本地测试时代码运行良好,但是当我运行我的服务并在Azure虚拟机上打开我的TCP通道时,出于某种原因无法访问我的MEX端点。

我会尝试导航到:http://<MyServiceName>.cloudapp.net:<MEXPort>/GameServer但我无法从该地址获取服务引用。在我如何配置Azure虚拟机以允许从本地端口到外部世界隧道方面,我是否存在某些问题?

回答

4

我的天啊,它的记录太糟糕了,但我必须在我的虚拟机上的Windows防火墙中的端口添加规则。

开始 - >具有高级安全性的Windows防火墙 - >右键单击入站规则 - >添加规则...为您在Azure管理门户的端点部分中指定的端口创建新的端口规则在线门户)...