wcf最大邮件大小

时间:2008-12-15 17:34:51

标签: wcf size service message max

嘿伙计们,这里有一个WCF问题:

我有两个服务,并在它们之间发送相当粗短的消息(~100kb)。虽然前面提到的值是消息大小的典型值,但它可能会大幅波动(正向和负向)。

因此,为了处理我必须传输一个肿胀的消息的情况,我已经在客户端和服务器端的app.config中启动了所有最大消息大小,最大字符串大小等属性(正确地使用相关端点)引用陈述大小的绑定

出于安全考虑,我输入的界限完全超出了任何可能的消息大小。但是,如果服务间通信在消息大小规模的较低端证明是可靠的,那么在较高端则不是这样 - 消息似乎根本没有传递。

最奇怪的是如果消息超过了max size那么就会抛出异常(我已经遇到了足够的这些知道这个!lol),但没有任何东西被抛出 - 这一切完全默默地经过。我已经尝试了各种大小的消息,它肯定只会随着消息大小的增长而开始发生。我可以证明目标服务没有接收到,因为在接收时,服务会在数据库中生成一个日志 - 但是对于大消息,不会记录日志。

正如我所说的,我几乎可以肯定我已经增加了app.config中所有适用属性的大小,所以我对这种行为感到非常困惑!

关于什么可能导致这种神秘行为的任何建议?任何帮助都会被很多赞赏,因为这是我项目的最后一道障碍!谢谢: - )

3 个答案:

答案 0 :(得分:1)

好吧这个问题似乎已经解决了(突然之后从未抱怨过,WCF开始对app.config中的某个值感到不满,改变了它,然后它似乎工作了!)

然而,现在我有一个同样奇怪的问题!因为somre的原因,它拒绝接受我已配置要发布的元数据。我的app.config(主机端)设置如下:

<services>
  <service name="DataFeederService.FeederService" behaviorConfiguration="DataFeederService.FeederServiceBehavior">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8010/Feeder"/>
        <add baseAddress="net.pipe://localhost/FeederPipe"/>
      </baseAddresses>
    </host>
    <!-- Service Endpoints -->
    <!-- Unless fully qualified, address is relative to base address supplied above -->
    <endpoint name="namedPipeEndpoint" 
    address=""  
    bindingConfiguration="IPCWindowsSecurity" 
    binding="netNamedPipeBinding" 
    contract="DataFeederService.IFeederService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>

    <endpoint name="httpEndpoint" 
    address="FeederService" 
    binding="wsHttpBinding" 
    bindingConfiguration="httpBinding" 
    contract="DataFeederService.IWebFeederService"/>

    <!-- Metadata Endpoints -->
    <!-- The Metadata Exchange endpoint is used by the service to describe itself to clients. -->
    <!-- This endpoint does not use a secure binding and should be secured or removed before deployment -->
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
  </service>
</services>

<bindings>
  <netNamedPipeBinding>
    <binding name="IPCWindowsSecurity" 
    maxBufferPoolSize="965536" 
    maxBufferSize="965536" 
    maxReceivedMessageSize="965536">
      <readerQuotas maxStringContentLength="965536" />
      <security mode="Transport">
        <transport protectionLevel="EncryptAndSign" />
      </security>
    </binding>
  </netNamedPipeBinding>
  <wsHttpBinding>
    <binding name="httpBinding" 
    maxBufferPoolSize="965536"
    maxReceivedMessageSize="965536">
      <readerQuotas maxStringContentLength="965536" />
    </binding>
  </wsHttpBinding>
</bindings>

<behaviors>
  <serviceBehaviors>
    <behavior name="DataFeederService.FeederServiceBehavior">
      <!-- To avoid disclosing metadata information, 
      set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="True" policyVersion="Policy15"/>
      <!-- To receive exception details in faults for debugging purposes, 
      set the value below to true.  Set to false before deployment 
      to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="True" httpHelpPageEnabled="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

我已尽力弄清楚为什么声称元数据未在指定地址“http://localhost:8010/Feeder/mex”发布。任何帮助都会非常赞赏。

干杯!

答案 1 :(得分:1)

抱歉,经过进一步拖网,我发现了错误的来源! datacontract中的一个类已被更改([DataContract]属性已被删除,但奇怪的是[DataMemeber]已被保留在相关属性上!非常奇怪!)

感谢您的所有帮助,特别是让我到达这一点,我终于可以洗手了这个该死的项目: - )

答案 2 :(得分:0)

WCF存在偶然问题会导致它“无声地”失败(即无异常),这可能很难调试。这听起来可能就是你看到的情况。

在这种情况下,WCF中的enabling the tracing options可能非常有用,因为它应该允许您查看消息是否确实到达服务以及调度程序如何处理它。