سؤال

ما هي أفضل طريقة لإنشاء خدمة ويب لقبول الصورة.قد تكون الصورة كبيرة جدًا ولا أرغب في تغيير حجم الاستلام الافتراضي لتطبيق الويب.لقد كتبت واحدة تقبل الصورة الثنائية ولكني أشعر أنه يجب أن يكون هناك بديل أفضل.

هل كانت مفيدة؟

المحلول

أين هذه الصورة "تعيش؟" هل يمكن الوصول إليه في نظام الملفات المحلي أم على الويب؟إذا كان الأمر كذلك، أقترح أن تقبل خدمة الويب الخاصة بك عنوان 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

}

نصائح أخرى

ألا يمكنك تحميل الصورة إلى الخادم باستخدام FTP، وبعد ذلك عندما يتم ذلك، يمكن للخادم (وبالتالي خدمة WCF) الوصول إليها بسهولة؟وبهذه الطريقة لن تحتاج إلى التفكير في إعدادات حجم الاستلام وما إلى ذلك.

على الأقل، هكذا فعلت ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top