gpt4 book ai didi

c# - 为什么附加字段 "Specified"的字段总是空的?

转载 作者:太空狗 更新时间:2023-10-29 19:55:55 24 4
gpt4 key购买 nike

我有应用程序。在这里,我从 WSDL 生成客户端服务。现在一些功能正常工作。但有些是错误的。

它是 WSDL 的一部分

<xs:complexType name="TStartInfoCalcZoneViewForArea">
<xs:sequence>
<xs:element minOccurs="0" name="ID" type="xs:int"/>
<xs:element minOccurs="0" name="startFreq" type="xs:double"/>
<xs:element minOccurs="0" name="endFreq" type="xs:double"/>
<xs:element minOccurs="0" name="startTime" type="xs:string"/>

它是c#中的一部分

public partial class TStartInfoCalcZoneViewForArea
{

private int idField;

private bool idFieldSpecified;

private double startFreqField;

private bool startFreqFieldSpecified;

private double endFreqField;

private bool endFreqFieldSpecified;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Order=0)]
public int ID
{
get
{
return this.idField;
}
set
{
this.idField = value;
}
}

/// <remarks/>
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool IDSpecified
{
get
{
return this.idFieldSpecified;
}
set
{
this.idFieldSpecified = value;
}
}

我为这个字段设置了值。例如

.ID = 100;
.IDSpecified = true; // I set nothing, false. But result is same.

问题是所有这些字段(ID、endFreq、startFreq)在 gsoap 服务器中都是空的。

出现这个问题的原因是什么?我该如何解决?

更新-原因及解决方案

问题是:我没有“gsoap 服务器”的源代码。但根据我们公司的协议(protocol),我们使用(可以观看)来自该应用程序的日志。此日志不正确(首先,这种情况下没有日志消息。然后此消息不正确。修复后问题解决了)。

还有很多带有“double”字段的类和结构。因此,在某些类的实例中,我设置了“...Specified = true;”。在另一种情况下,我不设置“...Specified = true;”。修复日志后,我看到了问题。

所以我需要设置“...Specified = true;”在所有类(class)。我不知道这个解决方案是否正确,因为

1)问过我们公司的另外一个progammers,他们不知道wcf normal。

2) 设置“...Specified = true;”,但我在日志中看到相同的消息。

最佳答案

问题是这样的:您的字段 idFieldint 类型,因此在 .NET 中,它不能为 null - 它必须始终具有有效的整数值,例如0.

另一方面,XML 模式将其定义为可选的:

<xs:element minOccurs="0" name="ID" type="xs:int"/>

所以 .NET 客户端无法知道 idField 中的 0 值是否意味着没有定义值(因为它有一个 minOccurs=0),或者您是否真的想将值 0 发送到服务器。

这就是 idFieldSpecified 发挥作用的地方:

  • 如果 idField0idFieldSpecifiedfalse --> 则 否值 已定义(例如,有点像 SQL 中的 NULL)

  • 如果 idField0 并且 idFieldSpecifiedtrue --> 那么你真的想要将 0 值发送给调用者

因此,如果您的字段具有随附的(field)Specified 字段,如果您想实际发送一个值,那么您必须设置( field)Specified 值为 true - 否则设置的值NOT 发送。

关于c# - 为什么附加字段 "Specified"的字段总是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19519186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com