Pergunta

Qual é a melhor maneira de criar um webservice para aceitar uma imagem. A imagem pode ser bastante grande e eu não quero alterar o padrão receber tamanho para a aplicação web. Eu escrevi um que aceita uma imagem binária, mas que eu sinto que tem que haver uma alternativa melhor.

Foi útil?

Solução

Onde é que esta imagem "ao vivo?" É acessível no sistema de arquivos local ou na web? Se assim for, gostaria de sugerir ter seu WebService aceitar um URI (pode ser um URL ou um arquivo local) e abri-lo como um Stream, em seguida, usando um StreamReader para ler o conteúdo do mesmo.

Exemplo (mas embrulhar as exceções em FaultExceptions, e adicionar 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

}

Outras dicas

Não é possível carregar a imagem para o servidor usando FTP, então, quando isso é feito no servidor (e serviço, assim WCF) van acessá-lo facilmente? Dessa forma, você não precisa pensador com a receber configurações de tamanho etc.

Pelo menos, é assim que eu fiz isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top