我目前有一个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发布很简单)。
答案 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)]
祝你好运