【发布时间】:2011-02-25 16:35:22
【问题描述】:
看起来您可以在 Azure 上托管本机代码:http://msdn.microsoft.com/en-us/library/dd573362.aspx。是否可以在这里运行套接字服务器(监听 tcp/udp)?甚至在顶部托管 CLR?
【问题讨论】:
标签: c++ azure clr-hosting
看起来您可以在 Azure 上托管本机代码:http://msdn.microsoft.com/en-us/library/dd573362.aspx。是否可以在这里运行套接字服务器(监听 tcp/udp)?甚至在顶部托管 CLR?
【问题讨论】:
标签: c++ azure clr-hosting
在工作角色上运行套接字服务器很容易,但只有 tcp,而不是 udp。您可以从工作角色的 OnStart() 方法启动自己的进程您也可以从 Run() 方法执行此操作,但是一旦达到运行状态,负载均衡器和外部世界就会看到您的角色,因此您可能会得到 tcp套接字服务器运行之前的流量。
您需要在工作角色的配置中创建一个 tcp 端点(右键单击工作角色并查看属性):
您指定的端口号是用于外部世界的。负载均衡器将为您的每个角色实例提供一个您的代码将绑定到的唯一端口。例如,假设您的 MyApp.exe 在启动时采用 --tcpport 参数:
var rootDirectory = Path.Combine(Environment.GetEnvironmentVariable("RoleRoot") + "\\", "approot\\MyApp");
int port = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["MyExternalEndpoint"].IPEndpoint.Port;
var cmdline = String.Format("--tcpport {0}",port);
MyProcess = new Process()
{
StartInfo = new ProcessStartInfo(Path.Combine(rootDirectory, "myapp.exe"), cmdline)
{
UseShellExecute = false,
WorkingDirectory = rootDirectory
}
};
MyProcess.Start();
然后在你的 Run() 方法中,永远等待,知道你永远不应该退出:
MyProcess.WaitForExit();
throw new Exception("MyApp quit on me!");
【讨论】: