如何使用VS 2010 vs VS 2008处理WCF服务中"指定"字段的差异?

Tad*_*ghe 3 wcf visual-studio-2010 visual-studio-2008

我们正试图迁移到VS 2010,我们注意到我们的WCF服务有些奇怪的行为.

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

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

有没有办法让VS 2010重新放入这些指定的字段?是否有其他解决方案不需要我们重写代码?

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

任何帮助非常感谢!

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

小智 5

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

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

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