我正在使用WCF创建一个SOAP Web服务,具有预定义的XSD契约,以及从该XSD自动生成的C#类型。
[ServiceContract]
[XmlSerializerFormat]
public interface IEBooking10
{
[OperationContract]
[XmlSerializerFormat]
OTA_CancelRS OTA_Cancel(OTA_CancelRQ rq);
}
OTA_CancelRQ& OTA_CancelRS是自动生成的类型,具有相应的XML序列化属性。 参数包含在OTA_Cancel和OTA_CancelResponse元素中,如下所示:
<OTA_Cancel>
<OTA_CancelRQ> ... </OTA_CancelRQ>
</OTA_Cancel>
和
<OTA_CancelResponse>
<OTA_CancelRS> ... </OTA_CancelRS>
</OTA_CancelResponse>
如何避免将WCF包装为输入OTA_Cancel操作的参数?
答案 0 :(得分:2)
这不是通过序列化处理,而是通过消息定义处理。目前您使用的默认值表示必须包装序列化数据但操作元素。如果要覆盖此行为,则必须使用message contracts。尝试这样的事情:
[MessageContract(IsWrapped = false)]
public class OTA_CancelRQMessage
{
[MessageBodyMember]
public void OTA_CancelRQ { get; set; }
}
[MessageContract(IsWrapped = false)]
public class OTA_CancelRSMessage
{
[MessageBodyMember]
public void OTA_CancelRS { get; set; }
}
[ServiceContract]
[XmlSerializerFormat]
public interface IEBooking10
{
[OperationContract]
[XmlSerializerFormat]
OTA_CancelRSMessage OTA_Cancel(OTA_CancelRQMessage rq);
}