【问题标题】:Auto generated WCF code has Boolean have a "Specified" additional field自动生成的 WCF 代码具有布尔值,具有“指定”附加字段
【发布时间】:2021-04-06 03:35:31
【问题描述】:

给定一个包含简单日期时间字段的 WSDL 定义,定义如下:

<xs:sequence>
    <xs:element minOccurs="0" name="endDate" type="xs:dateTime"/>
</xs:sequence>

使用内置的tool添加服务引用

生成的代码有一个未在 WSDL 中定义的新“指定”字段

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.8.4084.0")]
.. removed fluff..
public partial class Foo {
    private System.DateTime endDateField;     // Normal field   
    private bool endDateFieldSpecified;       // New Unknow field

当旧的生成代码是这样的:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
.. removed fluff..
public partial class Foo {
    [System.Runtime.Serialization.OptionalFieldAttribute()]
    private System.DateTime endDateField;

如果新的“指定”字段未设置为 true。该属性未序列化。
Soap Trace 中缺少该信息。

此问题与 VS 版本无关,也与更新无关。
文件头显示两个生成的代码相同的版本:

运行时版本:4.0.30319.42000

【问题讨论】:

    标签: c# wcf soap-client


    【解决方案1】:

    问题来自服务引用的配置。
    取消勾选“在引用的程序集中重用类型”将产生这个新的“指定”字段。

    制作以前可以工作的工作代码,在这里你正确地初始化了你的属性。 变成没有错误的不工作代码,但是每个原始类型的值在 SOAP Trace 中的序列化时都会丢失。

    为了修复该重用类型,如下图所示。
    enter image description here

    如果您选择不在 purpuse 上重用类型,以便从自动生成的代码中排除某些库。仅排除图片第二个选项中的那些。

    【讨论】:

    • 这个问题很容易重现到reference.cs生成的代码。并勾选和取消勾选这个东西。
    猜你喜欢
    • 2019-01-26
    • 2015-06-09
    • 2015-05-18
    • 2012-08-21
    • 2015-09-27
    • 1970-01-01
    • 2013-08-06
    • 2017-03-08
    • 2010-09-23
    相关资源
    最近更新 更多