您好我正在使用Windows Azure中的TCP / IP,并且我成功地开发了一个TCP客户端来发送和Web角色来接收TCP数据。
我想在.aspx页面中显示此接收的数据。我应该如何从.aspx页面访问webrole数据?
更新:
我研究了MVC架构并了解了流程。
我的问题是如何从Webrole.cs / WorkerRole.cs文件中将数据提取到Controller中。我使用以下代码接收TCP数据:msdn.microsoft.com/en-us/hh285885
答案 0 :(得分:0)
在任何一种情况下(网络或工作者角色)都有一个通用的解决方案 - 为要传输的数据使用中间存储。对于worker角色 - 很明显,worker角色本身与web角色的角色不同,因此它们之间没有直接的通信。对于Web角色来说,情况几乎相同。 Your WebRole.cs is instantiated in different process (WaIISHost.exe) than your web application (w3wp.exe)
因此,通用解决方案 - 为您的数据使用中间存储。您可以找到有关如何communicate between different roles(以及here和here)的不同方法。根据您的特定要求,您可能会发现使用Azure Table Storage Serivce来存储TCP中的数据更加容易,然后从Controller中读取表格。您甚至可能只需要使用Azure Storage Queues。
最后,它实际上取决于您的具体要求 - 您可以选择最适合您需求的解决方案。
<强>更新强>
嗨,数据阅读部分是在Webrole中为我的应用程序完成的 Run()函数。
好吧,your run function has no direct communication point of contact with you rcontroller。所以我不知道你在那里读什么,如果你只需要控制器中的数据。
我认为你应该修改你的主要应用arcitecture。您的控制器方法(即Action)仅在从客户端浏览器向您的应用程序发出有效HTTP请求时执行。我没有看到任何理由你在请求之前读取数据。特别是快速变化的数据。只需等待浏览器的请求(也可能是AJAX请求),然后读取数据。您可以有一些好的分区/行密钥策略,这样您就可以将读取的数据存储在本地应用程序缓存中,并读取尚未读取的内容。或者只是在读取数据后从表中删除?不了解你的整体应用需求,语义和反复无常。
至于你的另一个问题:
如果我在ASP.net MVC的控制器中实现数据读取部分, webrole会做什么?
好吧,您的“webrole.cs”就在那里,以便Windows Azure Fabric Controller知道您的Web应用程序正在运行。你可以将它完全留空(非实现)! RoleEntryPoint类本身有一个Run()方法的默认实现,它只是无限的睡眠,对任何人都没有伤害。