gpt4 book ai didi

wcf - 在配置文件中应用 [WebInvoke(ResponseFormat = WebMessageFormat.Json)]

转载 作者:行者123 更新时间:2023-12-04 15:04:49 25 4
gpt4 key购买 nike

我正在编写我所指的 POJ(Plain Old JSON)WCF Web 服务 - 一个接受和发出标准 JSON 的服务,没有任何 ASP.NET Ajax 喜欢添加的废话。

似乎可以通过三个步骤来完成此操作:

  • 将端点标签中的“enableWebScript”更改为“webHttp”
  • 用 [WebInvoke(ResponseFormat = WebMessageFormat.Json)]
  • 装饰方法
  • 添加[AspNetCompatibilityRequirements(RequirementsMode)的咒语
    = AspNetCompatibilityRequirementsMode.Allowed)] 到服务契约(Contract)

  • 这对我来说一切正常 - 我可以传入并返回漂亮的纯 JSON。

    如果我删除 WebInvoke 属性,那么我会返回 XML,因此它肯定会做它应该做的事情。但让我感到奇怪的是,指定 JSON 输出的选项出现在这里而不是在配置文件中。假设我也想将我的方法公开为 XML 端点 - 我该怎么做?目前我能看到的唯一方法是使用第二种方法来做完全相同的事情,但没有指定 WebMethodFormat.Json。然后对我的服务中的每种方法进行冲洗和重复?哎呀。

    在属性中指定输出应该被序列化为 JSON 似乎完全违背了 WCF 的理念,在 WCF 中实现服务是一种传输和编码不可知的方式,将如何将数据移动到配置文件。

    有没有更好的方法来做我想做的事情?还是我们被这个尴尬的属性困住了?还是我对 WCF 的理解不够深入?

    最佳答案

    我还没有对此进行全面测试,但是,我查看了反射器中的 WebMessageFormat 以及它在代码中的使用位置。

    webHttp 元素有一个名为 defaultOutgoingResponseFormat 的属性,可以将其设置为“Json”或“Xml”。

        <behaviors>
    <endpointBehaviors>
    <behavior name="ServicesJSONEndpointBehavior">
    <webHttp defaultOutgoingResponseFormat="Json"/>
    </behavior>
    </behaviors>

    在没有太多信息的情况下在线搜索后,我遇到了同样的问题,并且通常很难解决。

    我将尝试使用多个配置的 endpointBehaviors 并报告回来。

    2011 年 6 月 5 日更新

    仅供引用 - 我已经抛弃了像这样应该很简单的所有令人费解的场景的 Vanilla WCF,转而使用 ServiceStack ( http://servicestack.net/ )。如果您希望通过 HTTP 组合一个标准的 REST 风格/面向文档的服务,该服务开箱即用地支持 JSON/XML/CSV(以及 future 的 Protocol Buffer ),并且允许您将干净的 MVC 组合在一起轻松的风格路由,让 ServiceStack 一目了然。 ServiceStack 可以轻松、干净地处理许多事情,但由于标准 WCF 中的一些奇怪的配置问题或类似问题,这些事情总是会成为主要的 PITA。 ServiceStack 使用它自己的 JSON 序列化器,作为额外的好处,它胜过 DataContractJsonSerializer 和 JSON.NET,正如 Demis 在下面提到的。

    关于wcf - 在配置文件中应用 [WebInvoke(ResponseFormat = WebMessageFormat.Json)],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2914633/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com