WCF操作调用中的大字符串参数

时间:2011-05-19 17:43:26

标签: wcf wcf-client

我无法将字符串作为参数传递给WCF操作调用。字符串非常大(大约12000个字符)。

我在web.config中增加了maxStringContentLength并使用了几乎所有属性,但问题仍然存在。

我找到了一个解决方法 - 在客户端分割字符串并在服务器端连接。它以这种方式工作。

有人能指导我找到解决这个问题的正确方法吗?为什么WCF操作调用能够接受相同数量的数据(拆分为2个字符串参数),但在一个字符串参数中传递该数据时会抛出错误?我们在哪里配置WCF操作参数的大小限制?

--------------------------------- CODE ------------- -------------------

TestService.Service1Client client = new TestService.Service1Client();
string str = "VERY LARGE STRING";

//DOES NOT WORK
client.TakeLargeStringParam(str);

//WORKS
client.TakeLargeStringParam2(str.Substring(0, 5000), str.Substring(5000));

----------------------- WEB.CONFIG --------------------- -----

<system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IService1" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="819200" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:30701/Service1.svc" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IService1" contract="TestService.IService1"
                name="BasicHttpBinding_IService1" />
        </client>
    </system.serviceModel>

1 个答案:

答案 0 :(得分:3)

您需要在服务器侧增加maxStringContentLength,而不是在客户端增加。 web.config只有<client>部分,要配置服务,您需要在那里设置<service>部分。如果服务上没有匹配的服务配置,它将使用默认值,具有默认配额值。