c# - 构建队列服务 - 序列化任务供以后使用

标签 c# wcf serialization queue

我正在创建一个“队列管理器”服务,它的唯一职责是将工作项添加到队列中以及从队列中删除工作项。我已经将该服务实现为单例,因为我必须处理一些独特的同步问题。每当需要新任务时,我都会创建一个新任务对象,设置参数,然后将其发送到 QueueManager 服务并将其添加到 SQL 数据库中。 Task 对象此时被序列化到数据库中。当一个进程从 QueueManager 请求一个项目时,该服务会找到下一个可用的工作项目并将其反序列化回一个 Task 对象——从那里它被返回给客户端。

从技术上讲,这很有效。但是,我不喜欢将所有类型的任务硬塞进一个 Task 对象中。工作项的范围可以从复制文件到更新数据库。我必须向 Task 对象添加很多属性,这些属性对许多其他任务类型没有任何意义——它变得非常草率。关于如何解决这个问题,我的第一个想法是将 Task 实现为基类,然后让所有其他任务从 Task 派生。这将允许我拥有 CopyFileTask、UpdateDatabaseTask、DoLaundryTask 等工作项。然后我会将对象序列化到数据库并添加一列来告诉我类型是什么,这样我就知道以后如何反序列化它。

我看到这样做的第一个问题是 WCF 服务只需要返回一种类型。这将需要服务将工作项(例如 CopyFileTask)向下转换为 Task。但是,我现在需要将其转换回其真实类型,但客户端将不知道该类型是什么。

我可能没有很好地解释这一点。简而言之,我需要:

  • 创建任何类型的工作对象
  • 将其传递给 WCF 服务以将其存储在数据库中
  • 调用 WCF 服务以获取新工作项(它找到的任何内容)
  • 将该工作项目作为真实(非 Actor )返回给客户 对象

我的队列需要非常通用,因为许多其他应用程序正在添加和删除工作项。这是为大型并行系统设计的,将成为所有分布式工作项的中心。我们将不胜感激任何帮助和想法。

谢谢,

斯科特

最佳答案

你看过 ServiceKnownTypeAttribute 了吗?查看此 MSDN 上的示例代码: http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceknowntypeattribute.aspx

关于c# - 构建队列服务 - 序列化任务供以后使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8347136/

相关文章:

c# - List<> 包含对象的 DataContract 序列化

c# - string message = Regex.Replace(message, "\\", "") 有问题;

multithreading - WCF服务和请求排队

wcf - 在 WCF 客户端的代码中设置消息版本

c# - WCF 超时问题

java - 集合的序列化

c# - 序列化包含不可序列化成员的类

c# - 使用 HttpClient 的多个证书

c# - 如何将 .NET 标准库更改为 .NET 框架库?

c# - ASP.NET/C# : Bundling Sets of Files, 压缩它们,并通过响应发送回用户