سؤال

أحاول تقديم وظيفة HTTP إلى خادم ويب Apache.

أنا أجد أن إعداد Contentlength يبدو مطلوبا لطلب العمل.

أفضل أن أقوم بإنشاء XMLWriter مباشرة من GetRequestStream () وتعيين SendChunked إلى True، ولكن الطلب معلق إلى أجل غير مسمى عند القيام بذلك.

فيما يلي كيفية إنشاء طلبي:

    private HttpWebRequest MakeRequest(string url, string method)
    {
        HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
        request.Method = method;
        request.Timeout = Timeout; //Property in my class, assume it's 10000
        request.ContentType = "text/xml"; //I am only writing xml with XmlWriter
        if (method != WebRequestMethods.Http.Get)
        {
            request.SendChunked = true;
        }
        return request;
    }

كيف يمكنني إجراء عمل SendChunked حتى لا أضطر إلى ضبط الطول المحتوي؟ لا أرى سبب لتخزين سلسلة XMLWRITER في مكان ما قبل إرساله إلى الخادم.

تحرير: هنا هو رمزي الذي يسبب المشكلة:

    using (Stream stream = webRequest.GetRequestStream())
    {
        using (XmlWriter writer = XmlWriter.Create(stream, XmlTags.Settings))
        {
            Generator.WriteXml<TRequest>(request, writer);
        }
    }

قبل أن لم يكن لدي استخدام على كائن الدفق الذي تم إرجاعه من GetRequestStream ()، افترض أنني أغلق XmlWeriter دفق عند التخلص منها، لكن هذا ليس هو الحال.

واحدة من الإجابات أدناه، اسمحوا لي أن هذا. سوف بمناسبة لهم كإجابة.

بقدر ما يتعلق الأمر HttpWebRequest، يعمل الرمز الأصلي على ما يرام.

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

المحلول

هذا يجب أن يعمل بالطريقة التي لديك كتبها. هل يمكننا أن نرى الكود الذي يقوم بالفعل بالتحميل؟ هل تتذكر إغلاق الدفق؟

نصائح أخرى

النظر إلى المثال في http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.sendchunked.aspx. ما زالوا يضعون طول المحتوى. حقا خلاصة القول هو أنه إذا كنت تقوم بإرسال البيانات، فأنت بحاجة إلى إخبار جهاز الاستقبال مقدار البيانات التي سترسلها. لماذا لا تعرف مقدار البيانات التي ترسلها قبل إرسال الطلب؟

طول المحتوى:

قيمة العقارالنوع: نظام .. ::. Int64 عدد بايت البيانات لإرسالها إلى مورد الإنترنت. الافتراضي هو -1، والذي يشير إلى أنه لم يتم تعيين العقار وأنه لا يوجد طلب بيانات لإرسالها.

تحرير لآرون (كنت مخطئا):

HttpWebRequest httpWebRequest = HttpWebRequest.Create("http://test") as HttpWebRequest;
httpWebRequest.SendChunked = true;
MessageBox.Show("|" + httpWebRequest.TransferEncoding + "|");

من system.net.httpwebrequest.serializeheaders ():

if (this.HttpWriteMode == HttpWriteMode.Chunked)
{
    this._HttpRequestHeaders.AddInternal("Transfer-Encoding", "chunked");
}
else if (this.ContentLength >= 0L)
{
    this._HttpRequestHeaders.ChangeInternal("Content-Length", this._ContentLength.ToString(NumberFormatInfo.InvariantInfo));
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top