WCF сервис для получения имиджа - PullRequest
1 голос
/ 19 сентября 2008

Как лучше всего создать веб-сервис для приема изображений. Изображение может быть довольно большим, и я не хочу менять размер приема по умолчанию для веб-приложения. Я написал один, который принимает двоичное изображение, но я чувствую, что должна быть лучшая альтернатива.

Ответы [ 2 ]

4 голосов
/ 19 сентября 2008

Где это изображение "живет"? Это доступно в локальной файловой системе или в Интернете? Если это так, я бы предложил, чтобы ваш WebService принимал URI (может быть 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 голосов
/ 06 апреля 2010

Не можете ли вы загрузить изображение на сервер, используя FTP, тогда, когда это будет сделано, сервер (и, следовательно, служба WCF) сможет легко получить к нему доступ? Таким образом, вам не нужно мыслить с настройками размера приема и т. Д.

По крайней мере, так я это сделал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...