2013-07-02 6 views
5

Quando si tenta di passare un FileStream piccolo al servizio WCF, viene visualizzato l'errore "Timeouts non supportato su questo flusso". Qualcuno può vedere cosa sto facendo male?Il passaggio di FileStream a WCF genera un'eccezione "Timeouts non supportato su questo flusso"

Interfaccia:

[OperationContract] 
List<SystemClass> ReadExcelFile(System.IO.FileStream stream); 

Web.Config

<bindings> 
    <basicHttpBinding> 
    <binding name="streaming" maxReceivedMessageSize="2147483647" transferMode="Streamed"> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

<services> 
    <service name="MISDashboard.wcfService" behaviorConfiguration=""> 
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="streaming" contract="MISDashboard.wcfService"></endpoint> 
    </service> 
</services> 
... 
<httpRuntime maxRequestLength="2147483647"/> 

risposta

5

Non usare FileStream come parametro, ma Stream. A FileStream è uno stream associato al file system locale; una volta che avvii il trasferimento dei dati, nell'altro lato il flusso arriverà dalla rete, quindi un FileStream non può essere utilizzato lì.

Si potrebbe credere che sia più o meno lo stesso, ma lo Stream viene trattato in modo speciale da WCF e bypassano molte attività interne.

Inoltre, per l'invio di dati di grandi dimensioni, prendere in considerazione la lettura di this great article.

0

Immagino che il problema qui sia relativo alle proprietà ReadTimeOut e WriteTimeOut. Sotto il cofano WCF deve provare a configurarli e, poiché questi non sono implementati nella classe FileStream, lancia l'eccezione. Quindi se si definisce il metodo Tipo di argomento come Stream WCF dovrebbe creare lo stream appropriato necessario per lo streaming dei dati. Direi NetworkStream.

Problemi correlati