2011-02-27 5 views
5

Utilizo netTcpBinding y transmisión para enviar archivos de un servidor a otro como se describe en this codeproject article, como entiendo En wcf cuando queremos enviar stream debemos crearlo y devolverlo como contrato de mensaje, la pregunta es ¿cómo obtener el final del envío de archivos? porque quiero mover el archivo de la bandeja de entrada a la bandeja de salida cuando el archivo envía la garantía completadaCómo eliminar un archivo después del final de la transmisión wcf

Respuesta

4

He encontrado una gran solución en este blog si alguien va a necesitar en el futuro

OperationContext clientContext = OperationContext.Current; 
clientContext.OperationCompleted += new EventHandler(delegate(object sender, EventArgs args) 
    { 
     if (fileStream != null) 
     fileStream.Dispose(); 
    }); 
+0

Esta fue la solución que pude cruzar y me pareció genial al principio. Sin embargo, se ejecuta si el cliente ha copiado correctamente la transmisión o no. Esto no es un problema si solo estás tratando de eliminar los recursos (de hecho, es perfecto para eso). Pero es un problema si está moviendo el archivo o, lo que es peor, eliminándolo. – Jeff

+0

Sí, tienes razón @Jeff, encontré el último, ¿sabías otra forma de hacerlo? –

2

Cuando el segundo servidor ha terminado de recibir el archivo del primer servidor, puede llamar a otro método de servicio web para confirmar que obtuvo el archivo. En ese punto, puede mover el archivo de la bandeja de entrada a la bandeja de salida con la garantía de que el otro servidor lo recibió.

+0

buena, pero lo que si el primer servidor obtener el archivo, y perdieron la conexión cuando se trata de pedir para mover a la bandeja de entrada? que el cliente recibirá el archivo dos veces –

+0

Tiene razón, cuando diseña un sistema distribuido confiable, necesita tener en cuenta todos los tipos de escenarios donde se pierden mensajes, los servidores bajan, etc. Deberá idear un diseño que maneje esta situación y se asegura de no crear archivos duplicados. No creo que haya nada en WCF que te ayude a hacer esto automáticamente. – Saeed

+0

Supongo que encontré la solución, verifique mi respuesta –

Cuestiones relacionadas