سؤال
لدي مجموعة من خدمات WCF المستضافة ذاتيا. كل شيء يعمل بشكل جيد ولكني أبحث عن طرق لتطبيع/تبسيط التكوين الناتج. لقد قمت بتبسيطها قدر الإمكان ، لكنني ما زلت غير سعيد. حاليًا ، يبدو التهيئة مثل هذا:
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="BindingConfiguration" ...>
...
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
...
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="ServiceBehavior" name="Name1">
<endpoint address="net.tcp://localhost:8080/name1" binding="netTcpBinding" bindingConfiguration="BindingConfiguration" contract="Contract1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</service>
<service behaviorConfiguration="ServiceBehavior" name="Name2">
<endpoint address="net.tcp://localhost:8080/name2" binding="netTcpBinding" bindingConfiguration="BindingConfiguration" contract="Contract2">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</service>
...
</services>
</system.serviceModel>
إجمالاً ، لدي 6 خدمات لذلك فهي متكررة. من الناحية المثالية ، أود:
- لتحديد "LocalHost: 8080" مرة واحدة فقط ومشاركة بين جميع الخدمات ، وحدد الفرق فقط ("Name1" أو "Name2")
- حدد معلومات الهوية مرة واحدة فقط وشاركها بين جميع تعريفات الخدمة
إلى نقطتي الأولى ، لقد أدركت عناوين قاعدة, ، لكن هذا يعمل فقط على مستوى الخدمة ، وليس عبر خدمات منفصلة. إلى النقطة الثانية ، حاولت نقل معلومات الهوية إلى سلوك نقطة النهاية ، لكن هذا لا يبدو أنه مدعوم.
هل هناك أي شيء يمكنني القيام به لتبسيط هذا التكوين؟ أم أن خياري الوحيد للتبديل إلى نهج التكوين القائم على الكود؟
المحلول
لسوء الحظ ، كما لاحظت نفسك - مفهوم العنوان الأساسي هو فقط على مستوى كل خدمة - لذلك إذا كان لديك الكثير من نقاط النهاية لخدمة معينة ، فيمكنك استخدامها.
الخيار الوحيد الذي ستحصل عليه حقًا هو استخدام بعض الوسائل الأخرى لتكوين عنوانك الأساسي ، ثم استخدام ذلك لإنشاء نقاط نهاية الخدمة في التعليمات البرمجية. إذا قمت باستضافة خدمتك ، فيمكنك القيام بذلك في رمز المضيف الخاص بك ، قبل الاتصال ServiceHost.Open()
- إذا قمت باستضافة IIS ، فسيتعين عليك إنشاء العرف الخاص بك ServiceHostFactory
الذي يقوم بكل هذا الإعداد ، ثم استخدم مصنع مضيف الخدمة المخصص هذا لإنشاء مضيفي الخدمة في IIS.
كلاهما قابل للتنفيذ مع جهد يمكن التحكم فيه - السؤال هو ما إذا كان هذا يستحق المتاعب بالنسبة لك ، لكن لا يمكننا أن نقرر ذلك في مكانك ...