2011-12-08 2 views
0

나는 전에 WCF를 사용한 적이 없지만 간단한 서비스를 만들고 싶습니다. 컴퓨터가 로컬 컴퓨터에서 파일을 업로드하도록합니다. 내 인터페이스이있어 : 방법에WCF 업로드 파일

[OperationContract] 
[WebInvoke(Method = "GET",UriTemplate = "/File")] 
Stream GetFile(); 

가, 난 그냥 이렇게 : 나는 클라이언트에서이 프로그램을 실행할 때

return new FileStream(@"c:\myfile.zip", FileMode.Open); 

Result 속성은 스트림 자체가 포함되어 있습니다. 이것은 괜찮 았는데, 그것은 작동하지만, 오히려 클라이언트가 전체를 복사하는 대신 서버 자체에서 파일에 액세스하고 싶습니다. 클라이언트가 서버에서 직접 액세스 할 수 있도록 업로드 된 파일의 URL은 무엇입니까? 나는 그것이 http://computername:port/something...이라고 생각했다. (이것이 REST 서비스라고 생각한다.)

+1

수 파일 내용으로 무언가를해야한다면 어쨌든 그것을 (스트림, 공유 폴더, http, ftp 등) 공유하는 것과 상관없이 복사해야합니다. 그렇지 않습니까? – ChrisWue

+0

그러나 클라이언트가 WCF 서비스를 사용하지 않으면 어떻게됩니까? 파일에 직접 액세스 할 수 있다고 가정합니까?또한 위의 메서드는 전체 파일 (예 : 음악, 비디오 등)을 먼저 다운로드하므로 스트리밍을 허용하지 않습니다. – Skoder

+0

WCF를 사용하여 파일을 스트리밍하려면 transferMode 속성을 "Streamed"로 설정하여 스트림을 스트리밍하면됩니다. 전체 응답을 사용할 수있을 때까지 대기하는 버퍼링 된 모드가 아닌 파일을 계속 가져옵니다. – Rajesh

답변

0

당신이 말하는 것을 생각해 봅시다.

  • 사용자가 직접 파일에 액세스 할 수 있습니다. 이 경우 모든 사용자가 모든 컴퓨터의 파일에 액세스 할 수 있다고 생각하는 것이 적절합니다. 그것은 그렇게 명백하지 않습니다.

  • WCF는 실행중인 컴퓨터의 파일에 액세스하기위한 몇 가지 특별한 인터페이스를 제공합니다. 이것은 또한 큰 보안 구멍입니다.

  • 다른 아이디어가 있습니까?

웹에서 파일을 공유하려면 어떤 경우 에든 공용 인터페이스를 만들어야합니다. IIS 서버가 서버 컴퓨터에서 반환하거나 IIS 서버 만 WCF 서버가 될 수 있습니다.

어쨌든, 당신이 한 일은 옳습니다. Stream은 네트워크를 통해 파일을 반환하며 사용자가 생각한 것처럼 일부 정보를 복사 (복제)하는 오버 헤드가 없습니다.

UPDATE : 는이 article

UPDATE로 볼 수 스트리밍을 사용하려면 2 : 당신이 정말로 비디오 파일을 스트리밍해야하는 경우 클라이언트 인 경우, Smooth Streaming가 옵션

0

나는 당신이 여기에 흩어지고있는 것 같아. Stream을 반환하는 작업으로 WCF 서비스를 노출합니다. 이것이 파일 스트림임을 구현 세부 사항입니다. 실제로 메모리 스트림이나 네트워크 스트림 또는 Stream에서 파생되는 모든 것을 반환 할 수 있습니다. 클라이언트가 파일에 직접 액세스하게하려면 파일에 액세스 할 수 있도록 파일을 공유해야합니다. Windows에서는 공유 폴더를 만들 수 있지만 (인터넷에 공개하고 싶지는 않음) ftp 또는 http 서버를 설정해야합니다.

나는 WCF와 스트리밍으로 주위를 어지럽히 지 않았지만, 서버에서 스트림을 공급할 때 상자 밖에서 작동한다는 것을 기대할 수 있습니다. 이는 하나의 큰 덩어리로 파일을 다운로드하는 대신 파일을 스트리밍한다는 의미입니다). 이 MSDN article에서 WCF로 스트리밍하는 데 대한 몇 가지 제한 사항을 자세히 살펴보십시오.

+0

내 클라이언트에서 직접'GetFile'을 호출하여 비디오 파일을 스트리밍하려고했습니다. 클라이언트는 WCF 서비스를 사용하므로 메서드를 호출 할 수 있습니다. 이 메서드를 호출하면 전체 파일이 다운로드 될 때까지 기다리지 않아도됩니다. 파일 다운로드가 끝나면 다운로드 완료 이벤트의 'e.Result' 속성에서 액세스 할 수있었습니다. 그 때까지는 액세스 할 수있는 방법이 없습니다. 나는 파일을 스트리밍하고, 연주하기 전에 모든 것을 다운로드하지 않을 것입니다. 이것이 WCF에서 가능합니까? – Skoder

+0

@Skoder : WCF를 통한 스트리밍에 대한 정보가 들어있는 MSDN 링크를 추가했습니다. – ChrisWue