2008-09-19 7 views
1

이미지 수신을위한 웹 서비스를 만드는 가장 좋은 방법은 무엇입니까? 이미지가 상당히 클 수 있으며 웹 응용 프로그램의 기본 수신 크기를 변경하고 싶지 않습니다. 바이너리 이미지를 받아들이지 만 더 나은 대안이 있어야한다고 생각합니다.이미지 수신을위한 WCF 서비스

+0

이미지는 클라이언트에 있으며 웹 서버는 URI로 이미지를 가져올 수 없습니다. – elgrego

답변

4

이 이미지는 "어디에서 생깁니 까?" 로컬 파일 시스템이나 웹에서 액세스 할 수 있습니까? 그렇다면 WebService에서 URL (URL 또는 로컬 파일 일 수 있음)을 수락하고 스트림으로 여는 것이 좋습니다. 그런 다음 StreamReader를 사용하여 내용을 읽습니다.

예 (그러나 FaultExceptions에 예외를 포장하고, 추가 FaultContractAttributes) :

using System.Drawing; 
using System.IO; 
using System.Net; 
using System.Net.Sockets; 

[OperationContract] 
public void FetchImage(Uri url) 
{ 
    // Validate url 

    if (url == null) 
    { 
     throw new ArgumentNullException(url); 
    } 

    // If the service doesn't know how to resolve relative URI paths 

    /*if (!uri.IsAbsoluteUri) 
    { 
     throw new ArgumentException("Must be absolute.", url); 
    }*/ 

    // Download and load the image 

    Image image = new Func<Bitmap>(() => 
    { 
     try 
     { 
      using (WebClient downloader = new WebClient()) 
      { 
       return new Bitmap(downloader.OpenRead(url)); 
      } 
     } 
     catch (ArgumentException exception) 
     { 
      throw new ResourceNotImageException(url, exception); 
     } 
     catch (WebException exception) 
     { 
      throw new ImageDownloadFailedException(url, exception); 
     } 

     // IOException and SocketException are not wrapped by WebException :(   

     catch (IOException exception) 
     { 
      throw new ImageDownloadFailedException(url, exception); 
     } 
     catch (SocketException exception) 
     { 
      throw new ImageDownloadFailedException(url, exception); 
     } 
    })(); 

    // Do something with image 

} 
0

하면 FTP를 사용하여 서버에 이미지를 업로드 할 수 없습니다, 즉 서버를 수행 (따라서 WCF 서비스)의 당시 때 밴이 쉽게 액세스 할 수 있습니까? 그렇게하면 수신 크기 설정 등으로 생각할 필요가 없습니다.

적어도 내가 한 것입니다.