gpt4 book ai didi

Java Web 服务的 C# 客户端 - 数据互操作性问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:21:01 25 4
gpt4 key购买 nike

我有 Java Web 服务,一个 Web 方法的参数是自定义 Java 类型

public class KeyList {
public Integer key;
public Integer[] nums ;
public Integer result;
}

Web 服务更新 Result 值并将 KeyList 对象返回给客户端。

我有一个此 Web 服务的 C# 客户端(通过添加服务引用并指向 wsdl url 在 Visual Studio 中生成)。当我在 C# 中收到 keyList 对象时,第一部分 (Integer key) 显示为 0。如果我将 Java 自定义类型更改为在 KeyList 类型中使用 int key(而不是 Integer Key),那么它对 C# 客户端来说工作正常。

我想看看这两种情况(使用 int 和 Integer)之间的 wsdl 是否有很大的不同,但事实证明唯一的区别是 minOccurs 属性。

当使用整数键时

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

当使用 int 键时

<xs:element name="key" type="xs:int" /> 

C# 客户端无法在服务的返回值中正确接收更新的 Integer 的原因是什么?不用说,无论哪种方式,它都适用于 Java 客户端。


编辑:VS 为 KeyList 生成的 C# 类:

公共(public)类 keyList : INotifyPropertyChanged{

private int keyField;
private bool keyFieldSpecified;

private int?[] numsField;
private PropertyChangedEventHandler PropertyChanged;
private int resultField;
private bool resultFieldSpecified;

public event PropertyChangedEventHandler PropertyChanged;

public keyList();
protected void RaisePropertyChanged(string propertyName);

[XmlElement(Form=XmlSchemaForm.Unqualified, Order=0)]
public int key { get; set; }
[XmlElement("nums", Form=XmlSchemaForm.Unqualified, IsNullable=true, Order=1)]
public int?[] nums { get; set; }
[XmlElement(Form=XmlSchemaForm.Unqualified, Order=2)]
public int result { get; set; }
[XmlIgnore]
public bool resultSpecified { get; set; }

最佳答案

Java 中的

Integer 可以为空,这就是为什么您会看到 minOccurs="0" 的原因. int 不能为 null,这就是缺少 minOccurs 的原因。在 C# 中,int(或相同的 Int32)不能为空,因此它不期望 minOccurs="0" .问题很可能出现在 Visual Studio 代理生成器中。

它应该生成nullable此元素的 C# 中的 int(Int32?int?Nullable<Int32>):

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

根据您生成此代理的方式,Visual Studio 可能添加了名为“keySpecified”的额外 bool 字段。它有时会在可为空字段的名称中添加“指定”后缀。它希望您编写如下代码:

if(res.keySpecified){
// use res.Key
} else {
// assume res.Key is null
}

如果没有生成“keySpecified”,您可以查看使用 svcutil 生成代理.它有比 Visual Studio 中公开的选项更多的选项。另一种可能的解决方案是在 Java 端坚持使用 int,因为它直接映射到 C# 端的 int。

关于Java Web 服务的 C# 客户端 - 数据互操作性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7068946/

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