سؤال

معضلتي هي، في الأساس، كيفية مشاركة التعداد بين تطبيقين.

يقوم المستخدمون بتحميل المستندات من خلال تطبيق أمامي موجود على الويب.يستدعي هذا التطبيق خدمة ويب للتطبيق الخلفي ويمرر المستند إليها.يقوم تطبيق الواجهة الخلفية بحفظ المستند وإدراج صف في الملف وثيقة طاولة.

نوع المستند (7 أنواع مستندات محتملة: فاتورة, عقد إلخ) كمعلمة لخدمة الويب تحميل المستند طريقة.والسؤال هو، ما هو النوع (والقيم المحتملة) لهذه المعلمة؟

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

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

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

المحلول

يمكنني أن أتحدث فقط عن .net، ولكن إذا كان لديك خدمة ويب ASP.net، فيجب أن تكون قادرًا على إضافة تعداد إليها مباشرةً.

عند استخدام "إضافة مرجع ويب" في تطبيق العميل الخاص بك، يجب أن تتضمن الفئة الناتجة هذا التعداد

ولكن هذا من أعلى رأسي، أنا متأكد من أنني فعلت ذلك في الماضي، ولكن لا أستطيع أن أقول ذلك على وجه اليقين.

نصائح أخرى

أقترح عدم تمرير عدد صحيح بينهما، وذلك ببساطة لأغراض سهولة القراءة وتصحيح الأخطاء.لنفترض أنك تقوم بمراجعة سجلاتك وترى مجموعة من 500 خطأ لـ DocumentType=4.الآن عليك أن تبحث عن DocumentType الذي هو 4.أو إذا كان أحد التطبيقات يشير إلى رقم غير موجود في الآخر، ربما بسبب عدم تطابق الإصدارات.

إنه رمز أكثر قليلاً، وهو يفرك جزء الكتابة الثابتة من الدماغ بشكل أولي بعض الشيء، ولكن في البروتوكولات الموجودة أعلى HTTP، تكون الحكمة المستلمة جنبًا إلى جنب مع سلاسل مقروءة فوق التعدادات غير الشفافة.

ما زلت أستخدم التعداد داخليًا ولكني أتوقع من المستهلكين أن يمرروا لي الاسم فقط، وليس القيمة الرقمية نفسها.

فقط بعض الأمثلة السخيفة للتوضيح:

public enum DocumentType
{
  Invoice,
  Contract,
  WorkOrder,
  SignedWorkOrder
}

[WebMethod]
public void UploadDocument(string type, byte[] data)
{
  DocumentType docType = (DocumentType)Enum.Parse(typeof(DocumentType), type);
}

في .NET، يتم إجراء تسلسل لقيم التعداد (افتراضيًا) في ملف xml بالاسم.بالنسبة للحالات التي يمكن أن يكون لديك فيها قيم متعددة (أعلام)، ثم يضع مسافة بين القيم.يعمل هذا لأن التعداد لا يحتوي على مسافات، لذا يمكنك الحصول على القيمة مرة أخرى عن طريق تقسيم السلسلة (على سبيل المثال."عقد الفاتورة SignedWorkOrder"، باستخدام مثال lubos).

يمكنك التحكم في تسلسل القيم في خدمات الويب asp.net باستخدام الأمر XmlEnumAttribute, ، أو باستخدام EnumMember السمة عند استخدام WCF.

إذا كنت تستهلك خدمة الويب الخاصة بك من صفحة/تطبيق .NET، فيجب أن تكون قادرًا على الوصول إلى التعداد بعد إضافة مرجع الويب الخاص بك إلى المشروع الذي يستهلك الخدمة.

إذا كنت لا تعمل مع .NET إلى .NET SOAP، فلا يزال بإمكانك تعريف عداد بشرط أن تستخدم كلا نقطتي النهاية WSDL.

<s:simpleType name="MyEnum">    
     <s:restriction base="s:string">
          <s:enumeration value="Wow"/>
          <s:enumeration value="This"/>
          <s:enumeration value="Is"/>
          <s:enumeration value="Really"/>
          <s:enumeration value="Simple"/>
     </s:restriction>
</s:simpleType>

الأمر متروك لأداة WSDL -> Proxy generator لتحليل ذلك إلى ما يعادل التعداد في لغة العميل.

هناك بعض الأسباب الوجيهة لعدم الاستخدام enums على حدود الواجهة من هذا القبيل.يعتبر مشاركة داري حول هذا الموضوع.

لقد لاحظت أنه عند استخدام "إضافة مرجع الخدمة" بدلاً من "إضافة مرجع الويب" من VS.net، تظهر قيم التعداد الفعلية بالإضافة إلى أسماء التعداد.هذا أمر مزعج حقًا لأنني أحتاج إلى دعم عملاء الإصدارين 2.0 و3.5.انتهى بي الأمر إلى الانتقال إلى رمز وكيل خدمة الويب الذي تم إنشاؤه 2.0 وإضافة قيم التعداد يدويًا في كل مرة أقوم فيها بإجراء تغيير!

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