如何在 WCF Web 服务中抑制 xml 中的方法名称?
How do I suppress the method name from my xml in a WCF Web Service?
我不希望我的 Web 方法名称成为我 XML 中层次结构的一部分。我严格希望传入的对象封装在 SOAP 信封中,然后有一个空的 Header,在 Body 中我希望第一个子元素是我传入的对象类型(在这种情况下, ns:QueryRequest).
当我有一个 .asmx 网页时,我在我的层次结构中获得了两个额外的级别(即 Web 方法名称和传递到 Web 方法的对象的名称)。因此,在 Body 下,我有 GetData -> actualData -> ns:QueryRequest。我能够通过在 Web 方法上创建 [SoapDocumentMethod] 并设置 ParameterStyle=SoapParameterStyle.Bare.
来抑制前两个元素
我现在正在创建一个 WCF 网页以进行比较。我在界面上的 [OperationContract] 下指定了 [XmlSerializerFormat],这解决了我的命名空间问题。我尝试在其下使用 BodyStyle=WebMessageBodyStyle.Bare 实现 [WebInvoke] 和 [WebGet],但它并未抑制接口中的 GetData 方法名称。我需要 Body 下面的第一个元素是 ns:QueryRequest 而不是 GetData.
我怎样才能做到这一点?
您为输入参数定义了一个 [MessageContract(IsWrapped=false)] 并为输出定义了一个单独的。这将抑制不需要的根元素。
我不希望我的 Web 方法名称成为我 XML 中层次结构的一部分。我严格希望传入的对象封装在 SOAP 信封中,然后有一个空的 Header,在 Body 中我希望第一个子元素是我传入的对象类型(在这种情况下, ns:QueryRequest).
当我有一个 .asmx 网页时,我在我的层次结构中获得了两个额外的级别(即 Web 方法名称和传递到 Web 方法的对象的名称)。因此,在 Body 下,我有 GetData -> actualData -> ns:QueryRequest。我能够通过在 Web 方法上创建 [SoapDocumentMethod] 并设置 ParameterStyle=SoapParameterStyle.Bare.
来抑制前两个元素我现在正在创建一个 WCF 网页以进行比较。我在界面上的 [OperationContract] 下指定了 [XmlSerializerFormat],这解决了我的命名空间问题。我尝试在其下使用 BodyStyle=WebMessageBodyStyle.Bare 实现 [WebInvoke] 和 [WebGet],但它并未抑制接口中的 GetData 方法名称。我需要 Body 下面的第一个元素是 ns:QueryRequest 而不是 GetData.
我怎样才能做到这一点?
您为输入参数定义了一个 [MessageContract(IsWrapped=false)] 并为输出定义了一个单独的。这将抑制不需要的根元素。