不确定这在Azure服务中是否可行,以及这是否是最佳方法。
我有一个类,它从数据库中提取数据并构建xml输出。在正常情况下,由于它是以工作者角色运行的,因此它将在必要时运行,并将XML推送到外部web服务。然而,我还需要将该功能作为服务公开,以便不同的外部web服务可以对我的系统进行web服务调用,并获得相同的XML响应。我可以在工作人员角色中设置RESTful Web服务,并构建与我的工作人员角色相同的功能——问题是我现在有重复的代码。
我如何设置它,使我的代码从DB中获得额外的数据,执行一些计算,生成xml,所有这些都位于一个位置,可以从web角色(由外部web服务调用触发)和工作角色(按常规运行计划)访问。
我已经研究了所有关于TCP内部端点和worker webrole通信的问题,但似乎没有一个涉及到允许webrole调用workerrole上的方法并将数据传递给调用者的情况。
如果有人能帮我做这件事,我将不胜感激。感谢
从技术上讲,解决方案是创建一个包含所有共享代码的类库(.NET程序集),并从两个角色项目中使用它。您必须在每个角色项目中对该程序集的引用上将"copy local"设置为"true",以便将程序集打包到角色包中。
然而,在您的情况下,可能有更好的解决方案。您可以同时使用web角色。我的意思是,web角色就像一个工作者角色,只是安装了一个额外的IIS。除非你真的(真的)需要单独扩展和更新它们,否则你可以节省很多管理和部署方面的痛苦,也可以节省一些钱,只需将web角色用于所有事情。
如果我是你,我会将其作为Web角色,然后向Worker Role发送一条消息,并根据该消息触发Worker角色上的事件以启动所需的流程。
您可以使用队列存储或WCF服务来完成此操作。