2013-07-02 9 views
5

Beim Versuch, einen kleinen FileStream zu meinem WCF-Dienst zu übergeben, bekomme ich "Timeouts werden nicht von diesem Stream unterstützt" -Fehler. Kann jemand sehen, was ich falsch mache?Übergabe eines FileStream an WCF löst "Timeouts werden nicht in diesem Stream unterstützt" Ausnahme

Schnittstelle:

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

Antwort

5

nicht FileStream als Parameter verwenden Sie aber Stream. A ist ein Stream, der an das lokale Dateisystem gebunden ist. Sobald Sie mit der Übertragung der Daten beginnen, kommt der Stream auf der anderen Seite aus dem Netzwerk, sodass dort kein FileStream verwendet werden kann.

Sie könnten glauben, dass es ziemlich gleich ist, aber Stream wird in einer speziellen Weise von WCF behandelt und viele interne Aufgaben umgehen.

Auch zum Senden von großen Daten lesen Sie this great article.

0

Ich denke, das Problem hier ist über die Eigenschaften ReadTimeOut und WriteTimeOut. Unter der Haube muss WCF versuchen, sie einzurichten, und da diese nicht in der FileStream-Klasse implementiert sind, löst sie die Ausnahme aus. Wenn Sie die Methode Argument type als Stream definieren, sollte WCF den entsprechenden Stream für das Datenstreaming erstellen. Ich würde NetworkStream erraten.

Verwandte Themen