服务引用不会为 DateTime 创建 'specified' 属性

Service Reference does not create 'specified' properties for DateTime

我已经为 SOAP Web 服务添加了服务参考。 WSDL 包含一些 dateTime 元素,例如:

<xsd:element minOccurs="0" name="plannedStartDate" type="xsd:dateTime"/>
<xsd:element minOccurs="0" name="plannedEndDate" type="xsd:dateTime"/>

等VS2013 生成了一个 class 属性为(不可为空)DateTime 类型,但没有添加 plannedStartDateSpecified 等属性。因此,我无法选择跳过发送它们中的任何一个。如果我将生成的代码破解为可为空的 DateTime?属性,它会在这些字段中发送 null,并且远程系统会像我期望的那样清空这些值。我需要完全跳过发送输入元素。

创建 Web 引用确实会产生 "specified" 属性,这使我可以跳过发送可选元素,一切都很好。

有什么想法吗?我想使用服务引用来使我们使用服务的库中的所有内容保持一致。

我会等着看是否有人有更聪明的答案,但我用 svcutil.exe 和 XmlSerializer 一起使用,并包装,如下所示。

svcutil /serializer:XmlSerializer /namespace:*,<desired_namespace_for_generated_class> /wrapped <path_to_WSDL>

为了方便 app.config,我像往常一样在 Visual Studio 中为相同的 WSDL 添加了一个常规服务引用,然后用内容替换了 VS 生成的 Reference.cs 的内容从 svcutil.exe 生成的文件的一部分。现在我有了*指定的字段,一切都如我所愿。

是的,编辑生成的代码不太符合规范,但这是一个已发布且版本化的 Web 服务。所以我预计不必更新服务参考(因此会搞砸)。

另一种解决方案可以在这里找到:

(将 <Wrapped>true</Wrapped> 添加到生成的 Reference.svcmap 文件中的元素 ClientOptions