3

Visual Studio 和 SvcUtil 可用于生成代理代码以与服务集成。在 VS 2010 及之前的版本中,如果您想维护共享类型的跨层引用库,则会出现问题。这迫使一些变通方法来解决数据合约类型的等价问题以及无法正确使用本地类型的问题。

问题的 URL 参考: WCF 客户端代码生成 - “重用引用程序集中的类型”问题

我正在使用 Visual Studio 2012、ASP.NET 4.5、C# 代码

我的问题:“在 VS 2012 中是否修复了跨程序集类型的重用?” 我现在正在移植一些代码,但也担心这个错误可能会抬头。我可以运行测试用例,但如果有人已经有答案会更快。根据我的经验,如果您似乎无法在线找到答案(谷歌搜索并不断获得 2011 - 问题仍然存在),则可能没有修复。

我的目标:允许我未来的开发团队在整个公司 .Net 应用程序层和层中重用相同的类型库 [Presentation (Website, Mobile App layer - server side, ...), Domain (Services, Business Logic Layer, Data Access层)]。我想确保一些一致性和代码重用。代码将在每一层中尽可能“松散耦合”,但类型将通过参考程序集来确保。同样,我希望代码能够支持第三方的外部集成。因此,我需要从 DataContractAttribute 修饰类型构造所有代理类型以用于面向外部的服务,并为我的服务器端应用程序维护引用类型。

我会在这里遇到任何泥潭吗?上面链接的问题解决了吗?请指教。

4

2 回答 2

4

您报告的存在于引用程序集中重用类型选项中的错误发生是因为通过指定重用 VS 调用带有 /r 标志的引擎盖下的 svcutil.exe。

但是,svcutil.exe 用于DataContractSerializer帮助生成代码,不幸的是,在解析服务合同时,它有一套相当严格的规则。

因此,除非您为 XSD 提供服务并遵守这组规则,否则 svcutil.exe 将切换为使用XmlSerializer不支持 /r 标志(或重用)的 . 因此,您将无法重用类型。

如果您可以引用实际的服务合同类型(通过二进制引用),这是一个更好的解决方案,因为您可以一起取消服务引用。您还可以使用WSCF.blue来生成服务合同,因为它有自己的自定义序列化程序并支持类型的重用。

于 2012-12-20T15:09:11.723 回答
2

在我的情况下,WebService 和 WebApp 都引用了包含域实体的相同程序集。自然地,每个实体都用 DataContractAttribute 装饰,但是当使用 WebService 公开的端点在 WebApp 中生成 ServiceReference 时Reuse Type in Referenced Assemblies,VS2012 似乎忽略了这一点,这导致了本地程序集中的类型的额外副本。然后(经过几个小时的反复试验)我在 WebService 中的接口的 ServiceContractAttribute 中添加了一个命名空间参数。添加后,重新解析的 ServiceReference 开始根据需要引用我的sharedDataContract 类型。

 [ServiceContract(Namespace="http://www.example.com/Demo.WebService/")]
 public interface IConfigurationService { ..methods here.. }
于 2013-08-07T01:02:43.847 回答