Question

Quel est le meilleur moyen de créer un service Web pour accepter une image? L'image est peut-être assez grande 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 qui, à mon avis, doit exister une meilleure alternative.

Était-ce utile?

La solution

Où cette image "vit-elle?" Est-il accessible dans le système de fichiers local ou sur le Web? Si tel est le cas, je suggèrerais que votre WebService accepte un URI (qu'il s'agisse d'une URL ou d'un fichier local) et l'ouvre en tant que Stream, puis qu'il utilise un StreamReader pour en lire le contenu.

Exemple (mais enveloppez les exceptions dans FaultExceptions et ajoutez 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

}

Autres conseils

Vous ne pouvez pas télécharger l’image sur le serveur par FTP, puis le serveur (et donc le service WCF) peut facilement y accéder? De cette façon, vous n'avez pas besoin de penser avec les paramètres de taille de réception, etc.

Au moins, c'est comme ça que je l'ai fait.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top