سؤال

أقوم بنشر ما يلي إلى خادم Solr:

<add>
    <doc>
        <field name="uniqueid">5453543</field>
        <field name="modifieddate">2008-12-03T15:49:00Z</field>
        <field name="title">My Record</field>
        <field name="description">Descirption 
        Details
</field>
        <field name="startdate">2009-01-21T15:26:05.680Z</field>
        <field name="enddate">2009-01-21T15:26:05.697Z</field>
        <field name="Telephone_number">11111 111 111(text phone)</field>
        <field name="Telephone_number">11111 111 111</field>
        <field name="Mobile_number">1111111111</field>
    </doc>
</add>

أنا استخدم سولرنت لإرسال المستندات إليك مقتطف من الكود (s هو ملف XML أعلاه):

public string Post(string relativeUrl, string s) 
{
    var u = new UriBuilder(serverURL);
    u.Path += relativeUrl;
    var request = httpWebRequestFactory.Create(u.Uri);
    request.Method = HttpWebRequestMethod.POST;
    request.KeepAlive = false;
    if (Timeout > 0)
        request.Timeout = Timeout;
    request.ContentType = "text/xml; charset=utf-8";
    request.ContentLength = s.Length;
    request.ProtocolVersion = HttpVersion.Version10;
    try 
    {
        using (var postParams = request.GetRequestStream()) 
        {
            postParams.Write(xmlEncoding.GetBytes(s), 0, s.Length);
            using (var response = request.GetResponse()) 
            {
                using (var rStream = response.GetResponseStream()) 
                {
                    string r = xmlEncoding.GetString(ReadFully(rStream));
                    //Console.WriteLine(r);
                    return r;
                }
            }
        }
    } 
    catch (WebException e) 
    {
        throw new SolrConnectionException(e);
    }
}

عندما يصل إلى request.GetResponse، فشل بسبب هذا الخطأ:

base {system.invalidoperationexception} = {"أعاد الخادم البعيد خطأ:(500) خطأ داخلي في الخادم."}

عندما أنظر إلى الخادم في سجلات Apache، فإنه يعطي السبب التالي:

نهاية غير متوقعة لكتلة الإدخال في النهاية

إليك تتبع المكدس الكامل:

com.ctc.wstx.exc.WstxEOFException:نهاية غير متوقعة من كتلة الإدخال في العلامة النهائية في [row ، col {غير معروف المصدر}]:

يرجى ملاحظة أن خادم Solr يعمل على النظام التالي:

Microsoft Windows Server 2003 R2 Apache Tomcat 6

وأخيراً إليك سؤالي:

يبدو ملف Xml الذي أرسله جيدًا بالنسبة لي..هل لدى أي شخص أفكار حول سبب طرح Solr لهذا الاستثناء؟

شكرًا

ديف

تعديل الإجابة كالتالي:

public string Post(string relativeUrl, string s) 
{
    var u = new UriBuilder(serverURL);
    u.Path += relativeUrl;
    var request = httpWebRequestFactory.Create(u.Uri);
    request.Method = HttpWebRequestMethod.POST;
    request.KeepAlive = false;
    if (Timeout > 0)
        request.Timeout = Timeout;
    request.ContentType = "text/xml; charset=utf-8";
    request.ProtocolVersion = HttpVersion.Version10;
    try 
    {
        // Set the Content length after the size of the byte array has been calculated.
        byte[] data = xmlEncoding.GetBytes(s);
        request.ContentLength = s.Length;
        using (var postParams = request.GetRequestStream()) 
        {
            postParams.Write(data, 0, data.Length);
            using (var response = request.GetResponse()) 
            {
                using (var rStream = response.GetResponseStream()) 
                {
                    string r = xmlEncoding.GetString(ReadFully(rStream));
                    //Console.WriteLine(r);
                    return r;
                }
            }
        }
    } 
    catch (WebException e) 
    {
        throw new SolrConnectionException(e);
    }
}
هل كانت مفيدة؟

المحلول

لست على دراية كبيرة بمنفذ .Net أو Solr أو .Net الخاص بـ Solr.ولكن هنا هو تخميني.

postParams.Write(xmlEncoding.GetBytes(s), 0, s.Length);

هناك نوعان من الأخطاء المحتملة.

  1. عندما تحصل على بايتات من سلسلة، يجب عليك تحديد التشفير.قد يكون الأمر أن الترميز الافتراضي يختلف عن UTF8، الذي قمت بتعيينه في رأس نوع المحتوى استجابةً لذلك.
  2. من المحتمل أن تشير المعلمة الثالثة في Write() إلى طول مصفوفة البايت التي حصلت عليها من GetBytes().يمكن أن يكون صفيف البايت أطول من طول السلسلة.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top