0

我有一个 Silverlight 应用程序,可以将文件分块上传到 WCF 服务。当我在本地运行服务和 Silverlight 应用程序时,一切正常。当我将它们都部署到 IIS 时,它将适用于小于块大小(在本例中为 16k)的文件,但如果文件大于该文件则会失败。这几乎与此处描述的问题完全相同:http: //social.msdn.microsoft.com/Forums/en-US/wcf/thread/19329afc-8a73-4756-80cd-bbdada75c0e2但那里的解决方案不适用于我,我已经强烈引用了 WCF 代理实例。但在我的例子中,一个异步调用会成功,但多个调用会失败。

这是 web.config 中的 serviceModel 条目:

<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior name="">
                <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false"/>
                <serviceDebug includeExceptionDetailInFaults="true"/>
                <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <bindings>
        <customBinding>
            <binding name="binaryHttpBinding" closeTimeout="00:20:00" openTimeout="00:20:00" receiveTimeout="00:20:00" sendTimeout="00:20:00">
                <binaryMessageEncoding maxReadPoolSize="2147483647" maxWritePoolSize="2147483647" maxSessionSize="2147483647">
                    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
                </binaryMessageEncoding>
                <httpTransport maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" authenticationScheme="Anonymous" maxBufferSize="2147483647" transferMode="Buffered"/>
            </binding>
        </customBinding>
    </bindings>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <services>
        <service name="ADE.Web.IADEFileTransferService" >
            <endpoint address="" binding="customBinding" bindingConfiguration="binaryHttpBinding"
                contract="ADE.Web.ADEFileTransferService" />
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        </service>
    </services>
</system.serviceModel>
4

1 回答 1

0

您需要在客户端和服务器端具有相同的 readerQuotas 设置,即您的 silverlight 配置文件也需要具有相同的设置。

还可以考虑使用 maxItemsInObjectGraph 在 serviceBehaviour 选项卡中添加 dataContractSerializer 元素,如下所示

<serviceBehaviors>        
        <behavior name="default">
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
</serviceBehaviors>        

您也可以尝试添加 httpRunTime 元素的 maxRequestLength 值,如下所示:

<system.web>
    <httpRuntime maxRequestLength ="32768"/>
</system.web>
于 2012-05-19T14:12:15.987 回答