2

我在一个项目中引用了两个不同的 WCF 服务。我更新了其中一项服务的参考,现在没有为它生成任何代码。references.cs 文件顶部只有“这是生成的代码”注释。在其他项目中更新相同的服务并更新其他服务都可以正常工作。只是这个项目中的一个服务引用导致了问题,我没有从 Visual Studio 获得任何信息(它只是说它无法生成代码,我应该查看其他错误,这些错误没有提供任何信息)。

如果我取消选中“引用程序集中的重用类型”,则会生成代码,但我不想让这个项目与其他项目不同。我想解决问题。重新检查重用类型选项会再次生成一个空的 references.cs 文件。集合类型似乎也不重要。

我该如何诊断和解决这个问题?

更新:

看来我弄错了。更新服务引用似乎也破坏了其他项目的生成。我也确实注意到了这些警告:

自定义工具警告:无法导入 wsdl:portType 详细信息:运行 WSDL 导入扩展时引发异常:System.ServiceModel.Description.DataContractSerializerMessageContractImporter 错误:命名空间“http://schemas.datacontract”中具有数据协定名称“异常”的 ISerializable 类型.org/2004/07/System' 无法导入。无法为 ISerializable 类型自定义数据协定命名空间,并且生成的命名空间“TheDefaultNamespaceOfTheProject.ServiceReferenceName”与所需的 CLR 命名空间“System”不匹配。检查所需的命名空间是否已映射到不同的数据协定命名空间,并考虑使用命名空间集合显式映射它。

显然我在那里更改了命名空间,但它似乎试图将 System.Exception 映射到 ThatNamespace.Exception?为什么会这样做,我该如何纠正?我认为这是整个事情的关键。

4

1 回答 1

0

我在进行 WCF 调用的 Silverlight 应用程序中遇到了类似的错误。我创建了一个将异常对象作为参数传递的 WCF 方法。事实证明,异常对象在 Silverlight 中是不可序列化的,因为:

http://blogs.msdn.com/b/suwatch/archive/2009/01/21/wcf-silverlight-exception-and-serialization.aspx

以下是相关摘录:

WCF 的 DataContractSerializer 通过 ISerializable 序列化 Exception 类(.Net Framework 中的异常实现 ISerializable)。但是,在 Silverlight 中,没有 ISerializable 接口。因此,通过网络传输的异常的序列化信息不会被设置到异常类中。这不仅适用于 Exception,还适用于在序列化为 Silverlight 的 .Net 框架上实现 ISerializable 的任何类型。

于 2015-02-05T07:52:47.720 回答