【问题标题】:WCF XmlSerialization Attribute(POST)WCF XmlSerialization 属性(POST)
【发布时间】:2009-09-17 19:24:43
【问题描述】:

我目前有一个 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 服务?

更新

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

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

【问题讨论】:

    标签: c# wcf rest xml-serialization


    【解决方案1】:

    我不明白。为什么不直接使用 HttpWebRequest?通过 HTTP 执行 REST 的好处之一是您可以使用标准 HTTP 库。使用 HttpWebRequest 进行 POST 相对简单。为什么需要 WCF?如果您想将一个对象序列化到您的 POST 正文中,那么您可以使用 DataContractSerializer 或 XmlSerializer 来实现。

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

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

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

    【讨论】:

    • 嘿达雷尔,我很欣赏这里的回应。主要是因为我把事情复杂化了;)我们目前确实使用 WCF 为第三方服务发出 GET 请求,该服务很好地为我们处理序列化,并希望将某些内容发布到同一服务。我意识到我不必使用 WCF 来完成此操作,但由于依赖项已经存在,我不确定这是否可能。
    • 很高兴您感谢这只是一个友好的耳光。 :)
    【解决方案2】:

    我认为你不明白XmlSerializerFormat 的含义。这意味着应该使用 XML 序列化器而不是数据协定序列化器。两者都将序列化为 XML。

    【讨论】:

      【解决方案3】:

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

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

      祝你好运

      【讨论】:

        猜你喜欢
        • 2011-10-18
        • 1970-01-01
        • 2011-11-28
        • 2017-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-08
        • 1970-01-01
        相关资源
        最近更新 更多