【发布时间】:2011-10-27 11:47:12
【问题描述】:
我有 Java Web 服务,一个 Web 方法的参数是自定义 Java 类型
public class KeyList {
public Integer key;
public Integer[] nums ;
public Integer result;
}
Web 服务更新 Result 值并将 KeyList 对象返回给客户端。
我有这个 Web 服务的 C# 客户端(在 Visual Studio 中通过添加服务引用并指向 wsdl url 生成)。当我在 C# 中收到 keyList 对象时,第一部分(整数键)显示为 0。 如果我将 Java 自定义类型更改为在 KeyList 类型中使用 int 键(而不是 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#类:
公共类 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; }
}
【问题讨论】:
-
这确实是一个 c# 问题,而不是 Java 问题 - 您的问题主要涉及 c# 客户端的行为,而不是 java 客户端的行为。重新标记。
-
你能发布 Visual Studio 为你生成的课程吗?
-
另外,这是使用“添加服务引用”还是“添加 Web 引用”完成的?
标签: c# java web-services