WCF异步在本地工作,而不是在IIS上工作

时间:2012-05-18 17:29:19

标签: wcf iis

我有一个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>

1 个答案:

答案 0 :(得分: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>