调用WCF服务时字符串参数大小受限问题咨询
解决WCF超大字符串参数传输的大小限制问题
我太懂这种被误导性错误提示坑的感觉了!你遇到的这个“没有端点监听”的报错完全是个烟雾弹——本质就是WCF默认的消息大小限制拦住了你的超大字符串。毕竟你其他用byte[]的方法能正常传大数据,说明你可能已经配置过字节数组相关的限制,但字符串对应的参数被漏掉了。
下面是具体的解决步骤,服务端和客户端都得同步调整:
服务端配置调整
打开服务端的web.config(或者app.config),找到<system.serviceModel>节点,重点配置这两个关键参数:maxReceivedMessageSize:控制整个消息的最大大小,默认只有65536字节(64KB),必须调到能容纳你的28MB数据,比如设为104857600(100MB)maxStringContentLength:这是专门针对字符串内容的限制,默认仅8192字节,这个才是导致你字符串方法报错的核心!同样调大到104857600
给你个示例配置片段:
<system.serviceModel> <bindings> <basicHttpBinding> <binding name="LargeStringSupportBinding" maxReceivedMessageSize="104857600" maxBufferSize="104857600"> <readerQuotas maxStringContentLength="104857600" /> </binding> </basicHttpBinding> </bindings> <!-- 记得把这个绑定关联到你的服务端点 --> <services> <service name="YourNamespace.DataLayer"> <endpoint address="" binding="basicHttpBinding" bindingConfiguration="LargeStringSupportBinding" contract="YourNamespace.IDataLayer" /> </service> </services> </system.serviceModel>客户端配置同步
客户端的配置必须和服务端完全匹配,不然客户端这边的发送/接收限制也会触发错误。同样在客户端的配置文件里设置相同的maxReceivedMessageSize、maxBufferSize和maxStringContentLength参数,绑定名称也要对应上。代码配置的情况(如果不用配置文件)
要是你是通过代码动态创建绑定,直接在代码里设置这些属性就行:var binding = new BasicHttpBinding(); // 消息整体大小限制 binding.MaxReceivedMessageSize = 104857600; binding.MaxBufferSize = 104857600; // 字符串内容的专属限制 binding.ReaderQuotas.MaxStringContentLength = 104857600; // 用这个绑定创建客户端 var client = new DataLayerClient(binding, new EndpointAddress("http://example.com/service/DataLayer.svc"));
为什么byte[]能正常工作?因为字节数组对应的是readerQuotas里的maxArrayLength参数,你之前大概率已经调过这个,但字符串的限制是单独的maxStringContentLength,所以才会出现只有这个字符串方法卡壳的情况。
内容的提问来源于stack exchange,提问作者Franck
相关产品推荐
相关产品推荐

