我正在创建一个“队列管理器”服务,它的唯一责任是将工作项添加到队列中并从队列中删除工作项。我已经将服务实现为单例,因为我有一些我必须处理的独特同步问题。每当需要新任务时,我都会创建一个新的Task对象,设置参数,然后将其发送到QueueManager服务并将其添加到SQL数据库中。此时,Task对象被序列化到数据库。当进程从QueueManager请求一个项时,该服务找到下一个可用的工作项并将其反序列化为一个Task对象 - 从那里它将返回给客户端。
从技术上讲,这很有效。但是,我不满意将所有类型的任务变为Task对象。工作项可以是从复制文件到更新数据库的任何内容。我必须向Task对象添加许多属性,这些属性对许多其他任务类型没有任何意义 - 它变得非常草率。我对如何解决这个问题的第一个想法是将Task作为基类实现,然后让所有其他任务从Task派生。这将允许我有CopyFileTask,UpdateDatabaseTask,DoLaundryTask等工作项。然后我会将对象序列化到数据库并添加一列来告诉我类型是什么,所以我知道如何反序列化它。
我认为这样做的第一个问题是WCF服务需要只返回一种类型。这将要求服务将工作项(例如CopyFileTask)向下转换为Task。但是,我现在需要将其转换回其真实类型,但客户端将不知道该类型是什么。
我可能没有很好地解释这一点。简而言之,我需要:
我的队列需要非常通用,因为许多其他应用程序正在添加和删除工作项。这是为大规模并行系统设计的,并将成为所有分布式工作项的中心。任何和所有的帮助和想法将受到极大的关注。
谢谢,
斯科特
答案 0 :(得分:1)
你看过ServiceKnownTypeAttribute
了吗?看看这个MSDN上的示例代码:
http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceknowntypeattribute.aspx
答案 1 :(得分:0)