如果邮件具有特定大小,则发送失败

时间:2017-06-27 06:55:21

标签: c# .net wcf

我正在尝试从第三方使用网络服务。每当我发送给服务器的消息超过一定大小时,我都会遇到以下异常:

  

未处理的异常:System.ServiceModel.CommunicationException:向https://host/path发出HTTP请求时发生错误。这可能是由于在HTTPS情况下未使用HTTP.SYS正确配置服务器证书。这也可能是由于客户端和服务器之间的安全绑定不匹配造成的   ---> System.Net.WebException:基础连接已关闭:发送时发生意外错误   ---> System.IO.IOException:无法将数据写入传输连接:远程主机强制关闭现有连接。   ---> System.Net.Sockets.SocketException:远程主机强制关闭现有连接

我很确定关于HTTP.SYS的第一条消息是不正确的,因为如果我减少了消息大小,它就有效。

这是成功通话的代码:

var request = new GreetingUploadRequest
                {
                    msisdn = "12345678900",
                    personalGreetingVoiceData = File
                        .ReadAllBytes(@"d:\Temp\sample.wav")
                        .Take(48876)
                        .ToArray()
                };
var response = service.GreetingUpload(request);

这是一个不成功的电话代码:

var request = new GreetingUploadRequest
                {
                    msisdn = "12345678900",
                    personalGreetingVoiceData = File
                        .ReadAllBytes(@"d:\Temp\sample.wav")
                        .Take(48877)
                        .ToArray()
                };
var response = service.GreetingUpload(request);

正如您所看到的,唯一的区别在于Take - 它正在发送一个字节 我已经增加了我能想到的每一个设置,但无济于事:

<system.web>
    <httpRuntime maxRequestLength="2147483647" />
</system.web>
<system.serviceModel>  
    <bindings>
        <basicHttpsBinding>
          <binding name="VmsGreetingUploadWSSoapBinding" closeTimeout="10:01:00"
                   openTimeout="10:01:00" receiveTimeout="10:10:00" sendTimeout="10:01:00"
                   allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                   maxBufferSize="2147483647" maxBufferPoolSize="5147483647" maxReceivedMessageSize="2147483647"
                   messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                   useDefaultWebProxy="true">
            <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                          maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
            <security>
              <transport clientCredentialType="Basic" proxyCredentialType="None" realm="" />
            </security>
          </binding>
        </basicHttpsBinding>
    </bindings>
  <behaviors>
    <endpointBehaviors>
      <behavior name="endPoint">
        <dataContractSerializer maxItemsInObjectGraph="2147483647" />
      </behavior>
    </endpointBehaviors>
  </behaviors>
    <client>
        <endpoint address="https://host/path"
            binding="basicHttpsBinding" bindingConfiguration="VmsGreetingUploadWSSoapBinding"
            contract="ServiceReference1.VmsGreetingUploadWS" name="VmsGreetingUploadWS" />
    </client>
</system.serviceModel>

重要:服务器似乎配置正确,因为我可以从SoapUI项目发送完整数据!

我缺少什么设置?我怎样才能进一步解决这个问题?

然而,消息大小不是唯一的问题,因为如果我通过Fiddler 4路由请求 - 并允许它解密HTTPS流量 - 它甚至可以处理大消息!

0 个答案:

没有答案