سؤال

لدي مجموعة من خدمات 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.

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

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