WCF和DTO的大小

时间:2011-04-05 16:29:20

标签: c# wcf bandwidth dto

我们有一个业务逻辑/数据访问层,我们通过WCF服务在几个不同的端点上公开。我们已经创建了DTO以用作服务的数据协定。我们将通过不同的端点为多个不同的应用程序使用该服务。在某些应用程序中,我们只需要DTO中的一些字段,而在其他应用程序中,我们可能需要几乎所有字段。对于那些我们只需要少数人的人,我们真的不希望每次都“通过线路”发送整个对象 - 我们希望将其削减到我们实际需要的特定应用程序。

我在为每个应用程序创建特定的DTO集合(过度使用?)和在某些应用程序中仅需要的成员上使用EmitDefaultValue=false之类的东西之间来回走动。我还考虑使用XmlSerializer而不是DataContractSerializer来更好地控制服务中的序列化。

我的问题是 - 首先,我们是否应该担心我们传递的数据大小?其次,假设答案是'是'或我们决定关心它,即使它是'不',这里建议采用什么方法,为什么?

修改

感谢目前为止的回复。我担心我们可能会过早地进行优化。我想暂时保持这个问题的开放,希望我可以得到其余部分的答案,既可以用于我自己的启发,也可以解决其他任何人有这个问题,并且有正当理由需要优化

3 个答案:

答案 0 :(得分:2)

  

首先,我们是否应该担心我们传递的数据大小?

您没有给出字段的数量/大小,但一般情况下:。你已经有了信封和设置频道的开销,再多几个字节也无关紧要。

因此,除非我们谈论数百个双打或类似的东西,否则我会先等待,如果有真正的问题:实验和衡量。

答案 1 :(得分:1)

你应该担心吗?也许。性能/压力测试您的服务并找出答案。

如果你决定照顾......有两种选择:

  1. 创建一个返回部分水合DataContracts的不同服务(或同一服务中的不同操作)。所以这些新服务和/或操作返回相同的DataContrcts,但只是部分水合。

  2. 创建DataContracts的“lite”版本并返回它们。基本上与选项1相同,但是使用这种方法,您不必担心消费者滥用完整的DataContract(可能会获得空引用异常等)。

  3. 我更喜欢选项2,但如果您可以控制您的消费者,则选项1可能适合您。

答案 2 :(得分:0)

您似乎可能正在进入“过早优化”区域。我会避免为实体使用特定于应用程序的DataContracts,因为从长远来看它会导致问题。但是,如果您的应用程序有效地需要隐藏某些客户端应用程序中的信息而不是其他客户端应用程序,那么为给定实体提供多个DataContracts是件好事。 @Henk是对的,除非你处理大量深层嵌套的实体(在这种情况下你有不同的问题),然后不要“优化”你的设计只是为了减少网络传输包。