wcf - 我应该如何使用 VS 2010 与 VS 2008 处理 WCF 服务中 "Specified"字段的差异?

标签 wcf visual-studio-2008 visual-studio-2010

我们正在尝试迁移到 VS 2010,我们注意到我们的 WCF 服务有一些奇怪的行为。

在 VS 2008 中,当我添加给定的 WCF 服务引用时,对于每个不是引用类型的对象字段,对象浏览器显示一个 fieldNameSpecified bool 属性。我意识到这是存在的,因此有一种方法可以确定从服务返回的值是否实际具有值,因为 DateTime、ints 等不能为 null。

当我尝试在 VS 2010(设置为 .Net 3.5)中添加相同的引用时,所有这些 fieldNameSpecified 字段都丢失了。我们有在 VS 2008 中编写的代码,这些代码会查看这些 fieldNameSpecified 字段,这会导致我们的应用程序在尝试使用 VS 2010 时被破坏(因为 VS 2010 中生成的代理没有这些 fieldNameSpecified 字段)。

有没有办法让 VS 2010 将这些指定的字段放回原处?有没有其他不需要我们重写代码的解决方案?

此外,VS 2010 确定值类型字段(int 或 DateTime)是否实际包含从服务返回的有效数据的正确方法是什么?

非常感谢任何帮助!

说明:fieldNameSpecified 字段不是 WSDL 的一部分。为了方便起见,VS 2008 显然将这些添加到代理中......

最佳答案

我最近遇到了相反的情况。之前没有xxxspecified字段,现在出现了。而我们只用过VS2008。这实际上导致可选字段的值未传递给客户端应用程序,因为 xxxspecified 字段默认为 false。

如果您查看服务引用下自动生成的 reference.cs 文件的两个版本,您应该注意到其中的区别。一个使用 DataContractSerializer,另一个使用 XMLSerializer。

添加服务引用时,如果您使用服务的 URL,例如http://localhost/MyService.svc ,它将使用 DataContractSerializer。如果您使用 WSDL 的 URL,例如http://localhost/MyService.svc?wsdl ,它将使用 XMLSerializer。

关于wcf - 我应该如何使用 VS 2010 与 VS 2008 处理 WCF 服务中 "Specified"字段的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4971793/

相关文章:

svn - Visual SVN 和 Visual Studio 2010 Beta 2 效果不佳

c# - WCF 服务上的 XmlSerializer 反序列化时间波动

c# - WPF 应用程序如何知道从哪里开始?

javascript - 如何从 HTML 客户端调用 Websocket?

c# - SQL Server CE 数据库的连接字符串

jquery - Visual Studio 2008 Express 和 jQuery

visual-studio - 如何告诉 Visual Studio 始终展开“查找”对话框中的 "Find options"组框?

c# - 为 XML 序列化添加前缀和命名空间

c# - 如何从 WCF AuthenticationService 获取用户名?

wcf - 使用 Windows 进程使用 wcf 服务?