WCF XmlSerialization属性(POST)

时间:2009-09-17 19:24:44

标签: c# wcf rest xml-serialization

我目前有一个WCF服务来使用具有以下功能的远程REST服务:

[ServiceContract]
[XmlSerializerFormat]
public interface IMyApi
{
 [OperationContract]
 [WebGet(
  ResponseFormat = WebMessage.Xml,
  UriTemplate = "RemoteServicePage.jsp")]
 MyNewClass Send();
}

关于这个的好处是XmlSerializerFormat属性。自动将响应反序列化为方法的返回类型(即POX响应=> MyNewClass)。

然而,我找不到相反的样本,但我没有成功。我想将POX请求发布到给定服务。我很好奇是否有类似的方法将对象传递给WCF服务,而WCF服务又向目标发出了post请求。

非常感谢任何想法。

更新

只是对问题的澄清:

是否可以通过WCF(处理序列化)将对象发布到Web服务?

更新

我相信史蒂夫通过使用WebInvoke方法和属性RequestFormat来实现我正在寻找的东西,从而触及了我认为正确的方向。我想我想指出我没有托管允许发布的Web服务,而是尝试使用WCF发布到外部Web服务(即远程* .jsp)。

WCF允许轻松使用和访问外部Web服务,这是我熟悉的。我从未试图将流或对象发布到外部源(但是通过UriTemplate发布很简单)。

3 个答案:

答案 0 :(得分:1)

我认为您不理解XmlSerializerFormat的含义。这意味着应该使用XML Serializer而不是Data Contract Serializer。两者都将序列化为XML。

答案 1 :(得分:1)

我不明白。为什么不直接使用HttpWebRequest?通过HTTP执行REST的一个好处是您可以使用标准HTTP库。使用HttpWebRequest执行POST相对简单。你为什么需要WCF?如果要将对象序列化到POST主体中,则可以使用DataContractSerializer或XmlSerializer来执行此操作。

如果您真的不喜欢该选项,那么请查看WCF Rest Starter Kit Preview 2中新的Microsoft.Http.HttpClient类。它是一个非常好的客户端库,尽管它的名称和包装,它甚至没有对WCF的依赖!

此答案基于您的第二次更新。我之所以这么说,是因为您最初声明“我目前有一个WCF服务来使用远程REST服务”是没有意义的。您无法以声明方式定义要使用的远程接口。 WebInvoke这个术语不是你想的,它只是一个catch all属性,用于处理非GET请求。 WebGet和WebInvoke都处理传入的请求。

如果您想使用远程“REST”接口,那么您需要使用HttpWebRequest或新的HttpClient类。

答案 2 :(得分:0)

使用RequestFormat属性。对于JSON,这将是

[WebInvoke(Method = "POST",
                 BodyStyle = WebMessageBodyStyle.WrappedRequest,
                 ResponseFormat = WebMessageFormat.Json,
                 RequestFormat = WebMessageFormat.Json)]
祝你好运