كيفية العودة HTTPResponse من ASMX خدمة ويب إلى المستهلك صفحة ويب

StackOverflow https://stackoverflow.com/questions/632397

سؤال

أنا أعمل على ملف ويب الخدمة ؛ في محاولة لخلق طريقة تحميل وثيقة من خادم وتظهر الوثيقة في المتصفح (الدعوة .aspx صفحة ويب).خدمة بلدي يبني بدون خطأ ولكن أنا الحصول على الخطأ التالي عند محاولة "إضافة مرجع ويب" في فئة وكيل المشروع:

النظام.ويب.HttpResponse لا يمكن أن يكون تسلسل لأنه لا يكون parameterless منشئ.

هنا مقتطف من التعليمات البرمجية في .الملف ASMX:

public class FileService : System.Web.Services.WebService
{
    [WebMethod]
    public void DownloadDocument(string URI, HttpResponse httpResponse)
    {
        int DownloadChunkSize = (int)Properties.Settings.Default.DownloadChunkSize;
        // some more code here....
        using (httpResponse.OutputStream)
        {
            // more code here...
        }
    }
}

أرى أنا في حيرة حول كيفية إرسال مرة أخرى HttpResponse من خدمة ويب إلى طلب صفحة ويب.يمكن للشخص يرجى تعطيني تلميح عن كيفية القيام بذلك ؟ شكرا

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

المحلول

يجب أن ننظر إلى ويب معالجات (.ashx).فهي مثالية ما كنت تحاول تحقيق.

على سبيل المثال:

public class Download : IHttpHandler, IRequiresSessionState {

    public void ProcessRequest(HttpContext context) {
        var pdfBytes = /* load the file here */
        context.Response.ContentType = @"Application/pdf";
        context.Response.BinaryWrite(pdfBytes);
        context.Response.End();
    }
}

تحديث: وهو ashx معالج هو في الواقع استبدال aspx.في الأساس, فإنه لا يوجد لديه واجهة المستخدم ولكن لا تزال العمليات / طلبات الوظائف مثل صفحة aspx لا.وهذه النقطة هي أن الحد من النفقات العامة التي تم إنشاؤها بواسطة تشغيل منتظم صفحة aspx عند كل ما عليك القيام به هو عودة بعض محتوى بسيط (مثل ملف...) أو تنفيذ إجراءات سريعة.

على IRequiresSessionState واجهة يسمح لك استخدام كائن جلسة عمل مثل أي صفحة أخرى في موقعك يمكن.إذا كنت لا تحتاج ذلك ، ثم يغادر.

هذا الموقع وقد مثيرة للاهتمام من خلال المشي على كيفية إنشاء واحد.تجاهل الخطوة 4 كما كنت ربما لا يهمني ذلك.

على افتراض أن لديك الصفحة العادية (aspx) الذي يحتوي على ارتباط إلى المستند الخاص بك:الرابط في الملف aspx فعلا نقطة مباشرة إلى الخاص بك ashx معالج.على سبيل المثال:

<a href="/document.ashx?id=blah">Click Here</a>

ثم رمز في ProcessRequest طريقة ashx معالج ستفعل كل ما تدعو الحاجة إليه (مثل التحدث DLL الخاص بك) لتحديد موقع المستند ثم تيار مرة أخرى إلى المتصفح من خلال السياق.استجابة.BinaryWrite استدعاء الأسلوب.

نصائح أخرى

هذه ليست الطريقة القياسية ASMX خدمات الويب العمل.إذا كنت ترغب في جعل الخاصة بك معالج ، أو حتى استخدام صفحة ASPX لتقديم دكتور, كنت على ما يرام, ولكن المعيار ASMX خدمة ويب طريقة للقيام بذلك هو أن يرجع في الواقع أجزاء من الوثيقة باعتبارها ترميز النقطة.

إذا كنت ترغب في لفة الخاص بك, النظر في هذه المادة:http://msdn.microsoft.com/en-us/magazine/cc163879.aspx

ويب smethod (من asmx) بإرجاع كائن التي يمكن أن يكون تسلسل.

تحتاج إلى إنشاء طريقة مثل:

[WbeMethod] public byte[] DownloadDocument(string URI)

أو إذا كان المحتوى هو بعض النصوص - عودة السلسلة.

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