部署后,我无法连接到我的Azure云服务。看看类似问题的答案,我已经尝试检查我的端点,但它们似乎配置正确。我正在尝试通过TCP连接。当我使用Azure计算模拟器时,一切都在本地运行良好。
这是我的.csdef文件:
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="Server" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2013-03.2.0">
<WorkerRole name="WorkerRole" vmsize="Small">
<Imports>
<Import moduleName="Diagnostics" />
</Imports>
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="tcp" port="4029"/>
</Endpoints>
<LocalResources>
<LocalStorage name="DiagnosticStore" sizeInMB="20000" cleanOnRoleRecycle="false" />
</LocalResources>
</WorkerRole>
</ServiceDefinition>
在我的服务器实例上,这是一个Azure辅助角色,我有以下TCP侦听器:
const int port = 4029;
IPAddress addr = IPAddress.Loopback;
try
{
var listener = new TcpListener(addr, port);
listener.Start();
...
}
最后,在我的客户端,我有以下内容:
var hostName = new HostName("[IP Address as shown in the Azure Management Portal]");
TcpSocket = new StreamSocket();
try
{
await TcpSocket.ConnectAsync(hostName, "4029");
...
}
此代码工作正常,当我的服务器在Azure模拟器中本地运行时,我能够将我的客户端连接到我的服务器,所以我倾向于认为问题在于我设置我的方式Azure上的服务器。是否还有其他我需要检查的内容,或者有关如何进一步调试的提示?非常感谢任何帮助!
答案 0 :(得分:2)
我怀疑问题是您使用IPAddress.Loopback和本地端口的选择。
由于您未在端点的ServiceDefinition配置中指定本地端口,因此Windows Azure可以分配随机端口。然后,您应该使用以下方式访问端点:
listener = new TcpListener(
RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].IPEndpoint);
listener.ExclusiveAddressUse = false;
listener.Start();
此代码来自Maarten Balliauw post。
您可以选择在服务定义文件中指定本地端口。