serviço WCF para receber imagem
-
01-07-2019 - |
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.
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.