WCF LIST 传输大数据,远程服务器返回了意外响应 400

WCF传输LIST 大数据量 出现 远程服务器返回了意外响应 400 错误提示。

出现这个问题,各种搜索,都没有解决问题,而且有些都比较复杂,自己琢磨了一下,其实也不是很难,好了,看下面方案。
解决方案:
在web.config(host)端<system.serviceModel>节中, 增加 services 节 如下:
<services>
      <service behaviorConfiguration="app.dcgkbehavior" name="ErpAssistWCF.DCGKService"  >
        <endpoint  address="" binding="wsHttpBinding" bindingConfiguration="BindConfig"

contract="ErpAssistWCF.IDCGKService"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
</services>

service中的name 设置 为 wcf库名+wcf SVC 文件名。
endpoint中contract 设置为 wcf库名+wcf CONTRACT 文件名。

注意这里的几个关键项: behaviorConfiguration,bindingConfiguration,binding

先看第一个关键项,看下面的<behaviors>节的配置:
看到<behaviors>中有两个配置,其中一个name="",这个behavior节是必须有的,不可以删除。
看第二个behavior节,name为app.dcgkbehavior,这个name可以随便取,但是,但是,但是,重要的事

情说三遍,这个name 必须要和上面提到的service 节中  behaviorConfiguration后的名字必须一致。

<behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceTimeouts transactionTimeout="00:50:00"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
          <serviceThrottling maxConcurrentCalls="2147483647"

maxConcurrentInstances="2147483647" maxConcurrentSessions="2147483647"/>
        </behavior>
        <behavior name="app.dcgkbehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceTimeouts transactionTimeout="00:50:00"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
          <serviceThrottling maxConcurrentCalls="2147483647"

maxConcurrentInstances="2147483647" maxConcurrentSessions="2147483647"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
下面说第二个关键字 bindingConfiguration ,看下面的<bindings>节:
对了,第二个关键字 bindingConfiguration 后对应的名字就是这个接种 binding节的name,即为:
BindConfig

<bindings>
      <wsHttpBinding>
        <binding name="BindConfig" closeTimeout="00:10:00"
            openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
            bypassProxyOnLocal="false" transactionFlow="false"

hostNameComparisonMode="StrongWildcard"
            maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
            messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
            allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="2147483647"

maxArrayLength="2147483647"
              maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
              enabled="false" />
         
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None"
                realm="" />
            <message clientCredentialType="None" negotiateServiceCredential="true"
                algorithmSuite="Default" establishSecurityContext="true" />
          </security>
         
        </binding>
      </wsHttpBinding>
     
    </bindings>
下面说第三个关键字 binding ,看上面的 <bindings>节中,我这里使用的是 <wsHttpBinding>,所以

,binding关键字等于 “wsHttpBinding”。

以上就是在 webconfig中的设置。
设置完毕后,重新生成WCF。然后在 客户端,将引用的wcf服务删掉,重新引用。VS会自动更新

app.config。生成 配置后,其中字节的允许大小还是默认的,可以参照服务端配置,将数值改为最大

2147483647 。
下面为 app.config生成的配置:

<wsHttpBinding>
                <binding name="WSHttpBinding_IDCGKService" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00"

sendTimeout="00:10:00"
                    bypassProxyOnLocal="false" transactionFlow="false"

hostNameComparisonMode="StrongWildcard"
                    maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                    allowCookies="false">
                    <readerQuotas maxDepth="32" maxStringContentLength="2147483647"

maxArrayLength="2147483647"
                        maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
                        enabled="false" />
                    <security mode="None">
                        <transport clientCredentialType="Windows"

proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="Windows"

negotiateServiceCredential="true" />
                    </security>
                </binding>
            </wsHttpBinding>

时间: 2024-12-15 01:41:19

WCF LIST 传输大数据,远程服务器返回了意外响应 400的相关文章

visual studio 远程服务器返回了意外响应:(417)expectation failed

解决方法: 修改devenv.exe.config文件,添加 <servicePointManager expect100Continue="false" /> C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe.config <system.net>        <settings>            <ipv6 enabled="

远程服务器返回了意外相应:(413) Request Entity Too Large。

在从客户端向WCF服务端传送较大数据(>65535B)的时候,发现程序直接从Reference的BeginInvoke跳到EndInvoke,没有进入服务端的Service实际逻辑中,怀疑是由于数据过大超出限定导致的. 问题是我实际发送的数据是刚刚从WCF服务端接收过来的,一来一去,数据量差别并不大. 然后发现,在客户端和服务端实际使用的是不同的配置,对于客户端,在添加ServiceReference时自动生成的ServiceReferences.ClientConfig文件中system.se

WCF客户端传输大数据到服务端失败配置问题

最近使用WCF遇到一个问题:当客户端向WCF服务发送一个大量数据时候,发现会提示: "读取 XML 数据时,超出最大字符串内容长度配额 (8192).通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性,可增加此配额." 于是上网搜索,都说修改配置就可以,但我是初学者,修改半天还没弄出来,最后各种整合,尝试,终于成功了,于是记下了,以备以后需要: 在配置文件内添加如下代码就可以了(只需要

post数据时报错:远程服务器返回错误: (400) 错误的请求。

网上查了多种方法,有不少说法,报400说是传的数据格式不对,最后的结论确实是数据格式不对. Content_Type为:application/json,配的数据格式有些麻烦,特别数多层,单层还好.例如,我本传的数据是这个的json: { "key1": { "key11": "value11", "key12": "value12" }, "key2": "value2&qu

快速传输大数据(tar+lz4+pv)

快速传输大数据(tar+lz4+pv) 如果用传统SCP远程拷贝,速度是比较慢的.现在采用lz4压缩传输.LZ4是一个非常快的无损压缩算法,压缩速度在单核300MB/S,可扩展支持多核CPU.它还具有一个非常快速的解码器,速度单核可达到和超越1GB/S.通常能够达到多核系统上的RAM速度限制. 你PV 全命为Pipe Viewer,利用它我们可以查看到命令执行的进度. 下面介绍下lz4和pv的安装,下载软件: 下载pv-1.1.4.tar.gz wget http://sourceforge.j

tar+pv+lz4传输大数据

今天要备份个比较大的库,大概200G 左右吧,听说tar + pv + lz4 传输大数据的速度,比传统的scp 快很多,今天测试了一下: 过程如下: tar+pv+lz4 大文件传输,速度到底比scp 快多少呢,实际验证了,才知道,经过测试大概两倍吧 1.install 这里需要提前编译安装两个软件,这两个软件可以直接google 搜索下载,下面我给的链接可以直接wget 下载 1.PV(pv-1.1.4.tar.gz)包可以在线下载或网盘取 wget http://pkgs.fedorapr

C# FTP远程服务器返回错误:(550) 文件不可用(例如,未找到文件,无法访问文件)

今天用代码删除FTP服务器上的目录时候,报错:远程服务器返回错误:(550) 文件不可用(例如,未找到文件,无法访问文件). 习惯性的google,不外乎以下几点: 1.URL路径不对,看看有没有多加空格,或者大小写问题 2.权限是否足 3.需要反复连接的时候,如GetFileList,需要递归获得所有文件,keepAlive则设成false,一个查询请求完了后就关闭. 照做后问题依旧,很苦恼! 然后在FTP上建立了一个空目录,删除之,竟然能删除了.... 所以,找到原因:删除目录,该目录下不能

NuGet在Push的时候提示“远程服务器返回错误:(403)已禁用”问题解决

在使用NuGet把包push到nuget官网的时候,提示了如下信息: Failed to process request. 'The specified API key is invalid or does not have permission to access the specified package.' 远程服务器返回错误:(403)已禁用 解决方法: 1.检查是否已经设置过apikey,可以使用设置apikey的命令设置一下,在进行push,如果在设置的时候有错误提示,可以尝试使用管

HttpWebResponse远程服务器返回错误: (500) 内部服务器错误。

现象 我们编码实现请求一个页面时,请求的代码类似如下代码: 1 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strUrl); 2 req.UserAgent = "MSIE6.0"; 3 req.Method = "GET"; 4 HttpWebResponse res = (HttpWebResponse)req.GetResponse(); 5 StreamReader sr = new Stre