我有一个被 Silverlight 和 .NET 客户端使用的 WCF Web 服务。为了与两个客户端共享数据合同类型,合同在两个类库中定义:一个 Silverlight 和一个 .NET。定义数据协定类型的文件通过链接在两个库项目之间共享。
生成使用服务的代理非常适合 .NET。具体来说,我的 .NET 类库中的数据协定类型按预期重复使用。
但是,通过 SlSvcUtil.exe 生成 Silverlight 代理不会重用数据协定类型。无论我使用 /r 开关从命令行调用 SlSvcUtil.exe 还是使用 Visual Studio 中的“添加服务引用”对话框,这都是正确的。
通过反复试验,我确定在单一服务方法中使用的单一类型是此问题的根源。如果服务停止使用此类型,SlSvcUtil.exe 将按预期生成代理(使用从数据协定程序集中重用的类型)。
现在我已经将问题缩小到这种类型,我不确定接下来要寻找什么。该类型确实包含一个实现 IXmlSerializalble 的成员。这会导致这种行为吗?造成这种情况的一些常见原因是什么?有哪些好的方法可以进一步排除故障?