سؤال

التنفيذ الحالية

قاعدة بيانات Sql Server 2005 مع جدول يسمى الرسائل مع عمود يسمى MessageXml من نوع xml.

C# مشروع المكتبة مع Linq to Sql فئة بإنشاء فئة تسمى رسالة مع حقل يسمى MessageXml من نوع XElement.

WCF خدمة ويب الذي يعرض MessagePayload الدرجة مع خاصية تسمى MessageXml من نوع XElement.

خدمة ويب لا يخدم تصل رسالتي الدرجة التي أنشأتها Linq to Sql.يمكنني استخدام خفيفة الوزن كائن كوسيط بين.

السؤال

هو XElement حقا نوع أريد أن تستخدم في خدمة WCF أم أن هناك نوع أفضل.Xml التي تهدف إلى أن يكون مرت في الخدمة يجب أن تكون كاملة doc.أيضا, أنا أعاني من مشكلة في تحميل مستندات xml كما XElement.أعتقد أنني يجب أن تعرض كامل مستند xml نوع في ضوء الوزن فئة الخدمة ولكن أنا مشوشة قليلا على الاختلافات بين XDocument و XmlDocument.

علاوة على ذلك, لا أستطيع فضح WCF فئة الرسالة مع خاصية XDocument نوع لأنه يحتوي على خاصية XDeclaration النوع لا يمكن أن يكون تسلسل.

إذا كنت تستخدم XmlDocument من يجب أن أفعل هذا غريب تحويل xml أنواع في الترجمة بين Linq فئة خفيفة الوزن الطبقة.

 XmlDocument doc = new XmlDocument();
 doc.LoadXml(message.MessageXml.ToString());

 MessageEnvelope retVal = new MessageEnvelope()
 {
      MessageXml = doc,
 };

XmlDocument يبدو أن الحق واحد وأنا أعلم أنني سوف تضطر إلى القيام ببعض الترجمة ولكن ترغب في الحصول على أقرب إلى مناسبة قدر الإمكان.

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

المحلول

يمكنك استخدام إما XElement أو XmlElement:

public XmlElement GetXmlElement()
{
    var doc = new XmlDocument();
    doc.Load(PREFIX + @"Enumerations.wsdl");

    return doc.DocumentElement;
}

public XElement GetXElement()
{
    var doc = XDocument.Load(PREFIX + @"Enumerations.wsdl");
    return doc.Root;
}

كنت لا تريد إما XDocument ولا XmlDocument.تذكر أن كل ما يمكنك العودة سوف تكون في منتصف مستند XML التي تحتوي على الصابون المغلف.لا يمكن أن يكون مستند داخل الوثيقة ، كل ما عليك هو عنصر.

نصائح أخرى

جون سوندرز على المال هنا.وضع قليلا, إذا نظرتم WSDL التي يتم إنشاؤها عند العودة إما XmlElement أو XElement, سوف نرى شيئا من هذا القبيل:

<xs:complexType>
  <xs:sequence>
    <xs:any minOccurs="0" processContents="lax"/>
  </xs:sequence>
</xs:complexType>

هذا هو.وهو ما يعني في الأساس أي XML يمكن أن تذهب هنا.وهذا يعني أيضا أنه خلافا Chansik اقتراح فإنه لا ربط نوع الإرجاع إلى .صافي نوع معين.

لذا نعم, أنت لا تحتاج إلى استخدام سلسلة.

استخدام أي نوع أنت بحاجة إلى تسلسل فئة (سلسلة عملت دائما بشكل جيد بالنسبة لي) ومن ثم القيام التحويلات عند الضرورة على الخادم أو العميل للحفاظ على سلامة المستند.يمكنك بناء XDocument من واحد أو أكثر من XElements أيضا, لذلك أود أن تذهب مع XElement.

أسوأ الأحوال ، يمكنك حتى تجاوز التسلسل سلوك فئة (وليس رهيب جدا إذا كنت جيدة مع انعكاس).

XmlDocument القديمة ، غير Linq الوثيقة.إنهم نفس المفهوم تنفيذها في فئات مختلفة.

في العام ، XDocument و XElememnt هي الأفضل XmlDocument و XmlElement من حيث الأداء.

ولكن أود أن أقترح استخدام string إرسال مستند XML عن طريق خدمة WCF للأسباب التالية:

  1. التشغيل البيني
    • العملاء لا ترتبط محددة .NET framework الإصدار (يمكن للعميل اختيار استخدام XDocument أو XmlDocument.حتى جافا القائمة على العملاء يمكن أن تكون معتمدة طالما خدمات WCF تم تكوينها في مثل هذه الطريقة).
  2. التعامل مع Xml الإعلان بشكل صحيح إذا كان الأصل مستند XML يحتوي عليه.

ملاحظة:يرجى التأكد من ضبط التكوين بشكل مناسب لدعم كبير مستند xml.على سبيل المثال ، basicHttpBindingالصورة الافتراضية ماكس رسالة حجم 64KB.

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