2009-02-17 18 views
12

Si mi cliente .NET utiliza System.IO.File.Copy para copiar un archivo desde \ server1 \ share1 \ file1.txt a \ sever1 \ share2 \ file2.txt, qué los datos del archivo consiguen leídos hasta el cliente y luego escrito de nuevo en el servidor? En caso afirmativo, ¿hay alguna forma de que un cliente .NET pueda copiar un archivo en un servidor a otra ubicación en el mismo servidor sin tener que realizar un corte circular del archivo? ¿Hay alguna diferencia si el recurso compartido de destino es el mismo que el recurso compartido de origen?¿File.Copy() de un recurso compartido de red a otro recurso compartido en el mismo equipo copia el archivo a través de la red?

Respuesta

7

Sí lo hace. Puedo decir esto por experiencia personal al copiar archivos Zip de 10 GB entre máquinas. La máquina "cliente" estaba en una costa diferente de América que las otras dos máquinas. Entre las dos máquinas directamente de una de ellas tomó un tiempo razonable. Intentar iniciar la copia desde la máquina en la otra costa tomó ~ 10 horas :(

2

Esa es una pregunta excelente: parece que no puedo encontrar una respuesta definitiva, así que quizás lo mejor sea disparar Wireshark para una prueba.

+0

¿Por qué no vota su pregunta? Tal vez lo haya hecho y fue rechazado nuevamente, pero parece que mucha gente se olvida de votar por buenas preguntas. – Ash

+0

Gracias por el +1 y gracias por la sugerencia de la herramienta.Voy a actualizar mi pregunta con la salida de la herramienta como prueba de la respuesta "sí" aceptada, tan pronto como me acerque a ella. – flipdoubt

4

El contenido del archivo debe pasar por la máquina que realiza la operación Copiar. La única manera de evitar esto es ejecutar programas en la máquina objetivo (s)) que realizan la transferencia sin la máquina del cliente en el medio, como FXP que usa FTP para transferir el servidor al servidor.
Sin embargo, la apertura de esta vía también puede abrir una laguna de seguridad y sospecho que muchos administradores serían reacios a permitir esto.

0

Si es posible hacer un movimiento en lugar de una copia, eso debería suceder al instante. De lo contrario, debe poner un servicio en la máquina de destino para que pueda llamarlo de forma remota

+0

¿De verdad? ¿Puedes probarlo? – flipdoubt

+0

No estoy seguro de lo que quiere decir con "probar" aquí. Me lo demostré solo en Windows Vista. Darle una oportunidad. Use Explorer en el equipo A para acceder a un recurso compartido en el equipo B, y 'Cortar' una gran subcarpeta y 'Pegar' en otro lugar bajo el mismo recurso compartido. Se moverá al instante. –

+0

Según lo explica @cdonner, esto solo funcionará si las dos carpetas están en el mismo recurso compartido. Si hay dos participaciones diferentes, la mudanza se realizará como una copia + eliminación, incluido un viaje de ida y vuelta al cliente. – Anlo

7

Esta es una vieja pregunta, pero no creo que haya una respuesta correcta aquí.

De hecho, hay 2 preguntas (3 preguntas, pero la tercera es redundante).

La primera pregunta es si un proceso .Net que se ejecuta en una (3) máquina cliente copia un archivo de un recurso compartido de red a otro recurso compartido de red, ¿hay diferencia si los recursos compartidos de origen y destino están en la misma computadora (diferente del cliente) frente a 2 computadoras diferentes? La respuesta es claramente no. No hay ningún mecanismo, ningún túnel secreto entre los recursos compartidos de red. Los datos deben viajar al cliente y luego al otro compartir. No importa si la operación es una copia o un movimiento, y en realidad no importa si las acciones están en la misma computadora que el cliente (y realmente se accede a las carpetas como recursos compartidos de red con una ruta UNC y no como carpetas locales).

La segunda pregunta es, ¿cómo se puede evitar este viaje de ida y vuelta? Aquí están algunas sugerencias:

  1. Si el origen y el destino están en el mismo recurso compartido, mover un archivo no requiere un viaje de ida y vuelta, porque el sistema operativo solo actualiza las referencias en el sistema de archivos.
  2. Un proceso que se ejecuta en la máquina con el recurso compartido de origen o destino puede realizar la copia sin una ida y vuelta al cliente. Este proceso puede ser una copia remota, etc. si cualquiera de los hosts ejecuta Linux. En un host de Windows, puede instalar un servicio WCF que copie archivos cuando llegue una solicitud de un cliente.
Cuestiones relacionadas