我正在使用Java WSDL。
填充请求对象并使用request方法后,Enum和Boolean属性未随请求一起发送
经过一些搜索后,我尝试添加[DataContract] / [EnumMember]属性,但结果仍然相同(未成功)
在服务reference.cs上,我执行了以下操作
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.7.3190.0")]
[System.SerializableAttribute()]
[System.Runtime.Serialization.DataContract]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "{some link}")]
public enum clientSystemEnum
{
[System.Runtime.Serialization.EnumMember()]
/// <remarks/>
TOP_SERVER,
[System.Runtime.Serialization.EnumMember()]
/// <remarks/>
TOP_WEBCLIENT,
[System.Runtime.Serialization.EnumMember()]
/// <remarks/>
TOP_IBE,
[System.Runtime.Serialization.EnumMember()]
/// <remarks/>
SAF,
[System.Runtime.Serialization.EnumMember()]
/// <remarks/>
EXTERNAL_SYSTEM,
[System.Runtime.Serialization.EnumMember()]
/// <remarks/>
CCC,
[System.Runtime.Serialization.EnumMember()]
/// <remarks/>
UNKNOWN,
}
我的请求对象
doVacancyRequest.doVacancy = new doVacancy()
{
vacancyRequest = new vacancyRequest()
{
pos = new pointOfSale()
{
agencyKey = "20000000",
clientSystem = clientSystemEnum.TOP_IBE,
userNumber = {my user num}
},
echotoken = "package list aa606774-f460-4404-a172-3a5a36a94eae",
type = serviceType.PACKAGE,
traveler = new traveler[]
{
new traveler(){ type = travelerType.ADULT, uid = "T1", tourOperatorPosition = 0 },
new traveler(){ type = travelerType.CHILD, uid = "T2", tourOperatorPosition = 0, age=6 }
},
fromDate = new DateTime(2019, 12, 08),
endDate = new DateTime(2019, 12, 12),
searchOptions = new searchOptions()
{
availableOnly = true,
availabilityList = true,
useCache = true,
onlyCheapest = true
},
flightSearchCriteria = new flightSearchCriteria()
{
airportFrom = "TLV",
airportTo = "HER"
},
packageSearchCriteria = new packageSearchCriteria()
{
loadAdditionalGeographicUnits = true,
loadURLs = true
},
mainOccupancy = 2,
extType = "P"
}
};
这是提琴手的xml
<vacancyRequest xmlns="">
<pos>
<agencyKey>20000000</agencyKey>
<userNumber{my user num}</userNumber>
</pos>
<echotoken>package list aa606774-f460-4404-a172-3a5a36a94eae</echotoken>
<traveler>
<uid>T1</uid>
<tourOperatorPosition>0</tourOperatorPosition>
</traveler>
<traveler>
<uid>T2</uid>
<tourOperatorPosition>0</tourOperatorPosition>
</traveler>
<flightSearchCriteria>
<airportFrom>TLV</airportFrom>
<airportTo>HER</airportTo>
</flightSearchCriteria>
<searchOptions />
<extType>P</extType>
<packageSearchCriteria />
</vacancyRequest>
它可以看到enum和boolean属性没有随请求一起发送
缺少的属性:
枚举:
clientSystem = clientSystemEnum.TOP_IBE,
type = travelerType.ADULT,
type = serviceType.PACKAGE,
布尔值:
packageSearchCriteria = new packageSearchCriteria()
{
loadAdditionalGeographicUnits = true,
loadURLs = true
},
searchOptions = new searchOptions()
{
availableOnly = true,
availabilityList = true,
useCache = true,
onlyCheapest = true
},
将不胜感激,
提前致谢
最佳答案
您是否使用客户端代理类来调用服务?通常,服务应自动添加这些序列化项。据我所知,只有当我们使用Channel Factory调用服务时,客户端才会错过一些序列化项。由于项目具有服务器名称空间,导致此问题,导致类型转换出错。我们应该明确指定序列化项的名称空间,如下所示。
//you should use your practical namespace to replace this value
[DataContract(Namespace = "http://schemas.datacontract.org/2004/07/Server1")]
public class Product
{
[DataMember]
public int ID { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public Color Color { get; set; }
}
public enum Color
{
Red,
Green,
Blue
}
我们不需要将数据协定添加到Enum项目中,因为这是默认工具。
此外,建议您通过添加服务引用来调用该服务。它将自动生成名称空间。
随时让我知道问题是否仍然存在。
关于java - C#使用Java WSDL,Enum和Boolean属性不会在请求时发送,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57308748/