【问题标题】:binding and configuration for webHttpBinding in RESTful service?RESTful 服务中 webHttpBinding 的绑定和配置?
【发布时间】:2012-01-06 14:01:28
【问题描述】:

我是 WCF 的新手,我正试图了解服务所采用的迷宫般的配置。我有一个休息服务可以返回一个表的导出,它大于默认的maxReceivedMessageSize。所以我一直在尝试使用此服务/端点的配置,但我无处可去。下面如果我正在研究的要点,我错过了什么?我只是将 List 作为 JSON 或 XML 返回,并且我需要能够返回超过默认阈值。

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

<services>
  <!-- defin service -->
  <service behaviorConfiguration="EPRestBehavior" name="EPRestDNS">
    <endpoint address="" 
              bindingConfiguration="ApiExportBinding"
              binding="webHttpBinding" 
              contract="IDNSRestService" />
  </service>
</services>

<behaviors>
  <serviceBehaviors>
    <behavior name="EPRestBehavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>

  ...

</behaviors>
<bindings>
  <!-- Customizations for REST service -->
  <webHttpBinding>
    <binding name="ApiExportBinding" maxReceivedMessageSize="10485760"
                    maxBufferPoolSize="10485760" maxBufferSize="10485760" closeTimeout="00:03:00"
                    openTimeout="00:03:00" receiveTimeout="00:10:00" sendTimeout="00:03:00">
      <readerQuotas maxDepth="32" maxStringContentLength="10485760"
                      maxArrayLength="10485760" maxBytesPerRead="10485760" />
      <security mode="None" />
    </binding>
  </webHttpBinding>
</bindings>

<standardEndpoints>
  <webHttpEndpoint>
    <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" />
  </webHttpEndpoint>
</standardEndpoints>

更新 1 我已经删除了所有这些配置,并尝试使用现有的 webHttpEndpoint 部分进行更简单的操作:

<standardEndpoints>
  <webHttpEndpoint>
    <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" maxReceivedMessageSize="1000000000" />
  </webHttpEndpoint>
</standardEndpoints>

结果相同。 HTTP/1.1 502 Connection reset by peer

【问题讨论】:

    标签: c# wcf wcf-binding object-graph maxreceivedmessagesize


    【解决方案1】:

    这就是 WCF 可怕的原因。最后,我在服务器上创建了一个 svclog,实际问题是达到了默认对象图中的限制。我在实现中添加了我想要的新限制,就是这样。 7个多小时只是为了这样一个愚蠢的事情。

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, MaxItemsInObjectGraph = 2147483646)]
    

    【讨论】:

      【解决方案2】:

      异常发生在服务端还是客户端?一个常见的错误是您在服务器上更改了值,但忘记在客户端也进行更改。

      【讨论】:

      • 好点,它是客户端。使用 Fiddler 我看到我收到 502 连接重置错误,但在服务器上或调试时没有抛出异常。就像我错过了让客户知道“嘿,你即将获得大量数据,稍等片刻以获取所有数据”的东西。
      • 所以你没有抛出异常?
      • 不,没什么。只是 Fiddler 和浏览器中的客户端错误。
      • 查看我最新尝试的更新。是的,有另一种返回搜索的方法,它适用于数据的子集,但返回全部失败,我不确定我需要更改什么。
      猜你喜欢
      • 2011-03-05
      • 2010-12-21
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      相关资源
      最近更新 更多