4

服务结构要求[DataContract][DataMember]属性用于所有用作Actor服务的输入参数的类。将非DataContract类发送到Azure服务结构角色

有没有办法来覆盖这个默认值?

在我们的项目中,我们大量使用只读消息类,它具有只读属性和构造函数。序列化由Newtonsoft JSON序列化程序处理,该序列化程序非常棒。现在,我想在Service Fabric中发送这些消息,所以我需要一种方法来重写像JSON序列化程序之类的默认WCF类序列化。

回答

2

不幸的是,我不认为这是可能的。从this文章,

“可靠的集合允许串行被否决,但 可靠的演员目前还没有。”

因此,它可能值得映射到新的类。

2

我能够通过自己实现序列化来制定解决方法。基本上,这是如何工作的:

  1. 定义,其接受并返回byte[] +类型名称,例如演员(+合同)

    Task<byte[]> DoWork(string typeName, byte[] message); 
    
  2. 反序列化byte[]通过使用自定义序列的指定类型的实例(I使用Newtonsoft JSON转换器)。

  3. 在发送端,使用相同的串行器将对象序列化到byte[]

我定义了一些基类来包装它,所以我不必为每个actor/client重复它。

虽然这感觉有点哈克。很高兴能从Service Fabric团队获得一些意见。从平台本身获得本地可扩展性更好。 DataContract感觉有点古老,它不再用在我们项目的任何地方。

这种方法在我的blog post中有更详细的描述。

相关问题