我有一个通过HTTP托管的WCF服务。服务有一个opertation如下所示:肥皂反序列化问题
[OperationContract]
MyResponse ProcessRequest(MyRequest request);
和消息合同:
[MessageContract]
public class MyRequest
{
[MessageBodyMember(Namespace = "http://company.com/schema/myobjectschema/2", Name = "RequestPayLoad")]
public RequestPayLoadType RequestPayLoad{ get; set; }
}
的RequestPayLoadType对象是使用XSD.EXE产生出来的模式文件,并且具有所有适当的命名空间。
现在,当我从SOAP UI调用此服务操作时,我发现ProcessRequest操作的soap UI请求具有请求中存在的RequestPayLoadType中的所有私有字段。这实际上并不符合模式,而正在消耗这种功能的Java客户端因此而中断。
比如我requestpayloadtype结构如下:
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://company.com/schema/myobjectschema/2")]
[System.Xml.Serialization.XmlRootAttribute("EventHeader", Namespace = "http://company.com/schema/myobjectschema/2",
IsNullable = false)]
public class RequestPayLoadType
{
private string messageIDField;
public string MessageID
{
get
{
return this.messageIDField;
}
set
{
this.messageIDField = value;
}
}
}
当我发送请求正在形成这样的服务的请求:
<ns:TimeSeriesPayload>
<messageIDField >?</messageIDField >
</ns:TimeSeriesPayload>
我的问题是:为什么是民营字段出现在请求中。为什么不是公共财产?有没有一个属性可以防止这种情况发生?我的模式具有深层嵌套,所以我可以在根级别使用attrbute来防止这种情况发生?