Quelle est la meilleure façon de créer un service Web pour accepter une image? L'image peut être assez volumineuse et je ne souhaite pas modifier la taille de réception par défaut de l'application Web. J'en ai écrit un qui accepte une image binaire mais je pense qu'il doit y avoir une meilleure alternative.Service WCF pour la réception de l'image
1
A
Répondre
4
Où cette image "vit-elle?" Est-il accessible dans le système de fichiers local ou sur le Web? Si c'est le cas, je suggère que votre WebService accepte un URI (peut être une URL ou un fichier local) et l'ouvre en tant que Stream, puis en utilisant un StreamReader pour en lire le contenu.
Exemple (mais Envelopper les exceptions dans FaultExceptions, et ajouter 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
Tu ne peux pas télécharger l'image sur le serveur via FTP, puis quand cela est fait le serveur (et donc le service WCF) van facilement y accéder? De cette façon, vous n'avez pas besoin de réfléchir avec les paramètres de taille de réception, etc.
Au moins, c'est comme ça que je l'ai fait.
L'image réside sur le client et le serveur Web n'est pas capable de récupérer l'image par uri. – elgrego