2013-07-02 24 views
5

Podczas próby przekazania małego pliku FileStream do mojej usługi WCF pojawia się błąd "Limity czasu nie są obsługiwane w tym strumieniu". Czy ktoś może zobaczyć, co robię źle?Przekazywanie strumienia FileStream do WCF "Limity czasu nie są obsługiwane w tym strumieniu" wyjątek

Interfejs:

[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"/> 

Odpowiedz

5

Nie używaj FileStream jako parametr, ale Stream. A FileStream to strumień powiązany z lokalnym systemem plików; gdy zaczniesz przenosić dane, z drugiej strony strumień będzie pochodził z sieci, więc nie można tam użyć strumienia FileStream.

Można sądzić, że to jest to samo, ale Stream jest traktowane w specjalny sposób przez WCF i omija wiele wewnętrznych zadań.

Ponadto w przypadku wysyłania dużych danych należy rozważyć przeczytanie this great article.

0

Podejrzewam, że problem tutaj dotyczy właściwości ReadTimeOut i WriteTimeOut. Pod maską WCF musi próbować je skonfigurować, a ponieważ nie są one zaimplementowane w klasie FileStream, zgłasza wyjątek. Jeśli więc zdefiniujesz metodę Argument type jako Stream WCF, powinieneś utworzyć odpowiedni strumień, który jest wymagany do strumieniowania danych. Zgaduję, że NetworkStream.