Hei all,
我注意到我的SOAP Web服务有一种奇怪的行为。
当通过肥皂ui发送请求时,我填充了对象的每个属性。
调试webservice时,只有几个属性已填充。 看来,15个中的前5个属性都已填满。在Soap请求中切换属性时,再次填充前5个。
有没有人知道为什么请求对象的序列化不起作用?
接口定义为OperationContract,属性和请求类为DataMember / DataContract。
这是请求类
[DataContract]
public class Article
{
[DataMember]
public String ArticleName
{
get { return _ArticleName; }
set { _ArticleName = value; }
}
[DataMember]
public String Description
{
get { return _Description; }
set { _Description = value; }
}
[DataMember]
public Int ProductSubGroupNumber
{
get { return _ProductSubGroupNumber; }
set { _ProductSubGroupNumber = value; }
}
[DataMember]
public Double ArticleNumber
{
get { return _ArticleNumber; }
set { _ArticleNumber = value; }
}
[DataMember]
public Int Color
{
get { return _Color; }
set { _Color = value; }
}
[DataMember]
public Double Quantity
{
get { return _Quantity; }
set { _Quantity = value; }
}
[DataMember]
public Int Version
{
get { return _Version; }
set { _Version = value; }
}
[DataMember]
public Int Material
{
get { return _Material; }
set { _Material = value; }
}
[DataMember]
public Int Warehouse
{
get { return _Warehouse; }
set { _Warehouse = value; }
}
}
肥皂请求
<CreateArticle>
<ArticleGroup>1232456789</ArticleGroup>
<Articles>
<Article>
<ArticleName>test</ArticleName>
<Description>TEST 1213123</Description>
<ProductSubGroupNumber>987654</ProductSubGroupNumber>
<ArticleNumber>12345</ArticleNumber>
<Color>0</Color>
<Quantity>1</Quantity>
<Material>0</Material>
<Warehouse>0</Warehouse>
<Version>0</Version>
</Article>
</Articles>
</CreateArticle>
在调试器中只有属性直到填充颜色 - 其余为空。 如果我在请求中交换它们,则其他是填充而其他则不是。
请求包含作为Int的ArticleGroupID和一个文章数组。
答案 0 :(得分:2)
看起来这是DataContractSerializer
挑剔的“订单”执行。它真的很想知道数据的顺序。你可以尝试教育它:
[DataMember(Order=0)]
public string ArticleName {get;set;}
[DataMember(Order=1)]
public string Description {get;set;}
[DataMember(Order=2)]
public int ProductSubGroupNumber {get;set;}
[DataMember(Order=3)]
public double ArticleNumber {get;set;}
[DataMember(Order=4)]
public int Color {get;set;}
[DataMember(Order=5)]
public double Quantity {get;set;}
[DataMember(Order=8)]
public int Version {get;set;}
[DataMember(Order=6)]
public int Material {get;set;}
[DataMember(Order=7)]
public int Warehouse {get;set;}