通过WCF从SQL数据库读取字节数组 - maxArrayLength问题

时间:2013-01-17 15:03:58

标签: c# .net wcf

我有一个WCF服务,应该将List返回给我的客户端应用程序。数据库中的一列是byte[]。当我尝试返回此Object列表时,我只得到一个带有此内部异常的NetDispatcherFaultException

  

“已超出最大阵列长度配额(16384)   读取XML数据。可以通过更改此配额来增加此配额   使用的XmlDictionaryReaderQuotas对象上的MaxArrayLength属性   在创建XML阅读器时。第1行,第38697位。“

我在此之后用Google搜索并发现我应该增加maxArrayLength中的web.config,所以我做了:

<protocolMapping>
    <add binding="basicHttpsBinding" scheme="https"/>
    <add binding="basicHttpBinding" scheme="http" 
         bindingConfiguration="CrudserviceBinding" />
</protocolMapping>

<bindings>
    <basicHttpBinding>
        <binding name="CrudserviceBinding" maxReceivedMessageSize="52428800" >
            <readerQuotas maxStringContentLength="10242880"  
                          maxArrayLength="10242880" />
        </binding>
    </basicHttpBinding>
</bindings>

这是我在客户端的app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
              <binding name="BasicHttpBinding_ICrudService">
                <readerQuotas maxStringContentLength="5242880" 
                              maxArrayLength="52428800" />
              </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost/My.Project/CrudService.svc"
                      binding="basicHttpBinding" 
                      bindingConfiguration="BasicHttpBinding_ICrudService"
                      contract="MobileCrudService.ICrudService" 
                      name="BasicHttpBinding_ICrudService" />
        </client>
    </system.serviceModel>
</configuration>

当我再次尝试此操作时,WCF服务返回相同的异常。任何人都可以解释我应该如何处理这个问题?

1 个答案:

答案 0 :(得分:1)

如果要在客户端的类库中调用该服务,请确保更改实际的Application .config文件。不要使用

Products/ProductName/Main/Source/Project_Name/bin/Debug/ProjectName.dll.config

改为使用

Products/ProductName/Main/Source/Project_EXE_Name/bin/Debug/YourExe.config