2009-10-05 4 views
3

I은 ​​WCF 클라이언트로 스트림을 A (파일)을 보내 다음 코드가 : 나는 클라이언트 측에서 전송 스트림의 길이를 얻을 수 있기를 원하는WCF 스트림 길이

public Stream Download(string path) 
    { 

     try 
     { 
      FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read); 

      return stream; 

     } 
     catch (Exception ex) 
     { 
      string error = ex.Message; 

      return null; 
     } 
    } 

을하지만, 스트림 클래스는 이것을 지원하지 않습니다.

가장 좋은 방법은 무엇입니까?

감사합니다, 다음 토니

답변

4
[MessageContract] 
public class SizedStreamMessage 
{ 
    [MessageHeader] 
    public long streamSize; 

    [MessageBody] //Has to be just one MessageBody for streaming to work! 
    public Stream theStream; 
} 

을 그리고 :

분명히
[OperationContract] 
public SizedStreamMessage Download(string path) 
{ 
//Fill in streamSize... 
//Fill in theStream... 
} 

그것은 단지 전체 스트림을 버퍼링하지 않고 당신이 실제로 서버 측에 대한 크기를 얻을 수있는 스트림에 대한 작동합니다 (실제로 파일을 읽지 않고 파일의 길이를 얻을 수 있기 때문에 FileStream이 작동해야합니다).

+0

내가 이해 한대로 SOAP 메시지를 통해 전송 된 메시지를 변경하고 메시지 헤더에 추가합니다. 내가 참조. 감사! 나는 이것을 사용할 수있다. –