开发者

Large string argument in WCF operation call

I am unable to pass a string as an argument to a WCF operation call. The string is quite large (about 12000 characters).

I have increased maxStringContentLength in web.config and played around with almost all the attributes but the problem still remains.

I have found a workaround - Split the string at client's end and concatenate at the server's end. It works this way.

Can anybody direct me towards the right way of solving this problem? Why WCF operation call is able to accept the same amount of data (split into 2 string parameters) but throws error when that data is passed in one string parameter? Where do we configure the size limit of WCF operation arguments?

---------------------------------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开发者_StackOverflow社区_IService1" />
        </client>
    </system.serviceModel>


You need to increase the maxStringContentLength at the server side, not at the client. The web.config only has a <client> section, and to configure a service you'd need to set a <service> section there. If there's no matching service configuration on the service, it will use a default one, which has the default quota values.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜