التحكم في اسم توجيه الإخراج المسمى عند استضافة ربط WCF net.pipe في IIS

StackOverflow https://stackoverflow.com/questions/1806430

  •  05-07-2019
  •  | 
  •  

سؤال

لدي خدمة يمكن الوصول إليها عبر http وnet.pipe.تتم استضافته في IIS 7 (Server 2008).ربما أستضيف مثيلات مختلفة من هذه الخدمة لعدة عملاء على نفس الجهاز، ومن ثم يتم إعداد HTTP بأسماء مضيفين افتراضية وما إلى ذلك.العمل يسير بشكل جيد.

اعتقدت أنني سأفعل مشابهًا لـ Net Net Pipe Binding - باستخدام شكل من أشكال اسم العملاء الظاهري "في عنوان قاعدة الأنابيب المسماة ، مما يسمح لي بالوصول إلى مثيلات العملاء المختلفة مع الجرار net.pipe مختلف (أدرك الشبكة. أسماء الأنابيب ليست عنوان URL الخاص بـ URL ، لذا يمكن أن تكون تعسفية بشكل أساسي ، لكنني اعتقدت أنني سأتبع نمطًا مشابهًا لعناوين HTTP).

هنا هو web.config الخاص بي

<service name="Administration" behaviorConfiguration="AdministrationBehavior">
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="normalWsBinding" contract="IAdministration" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <endpoint address="" binding="netNamedPipeBinding" bindingConfiguration="normalNetNamedPipeBinding" contract="IAdministration" />
    <endpoint address="mex" binding="mexNamedPipeBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="http://virtualhostname.com/service" />
        <add baseAddress="net.pipe://virtualhostname.com/administration/service" />
      </baseAddresses>
    </host>
</service>

ومع ذلك ، عند الوصول إلى WSDL للخدمة - يبدو أن العنوان الأساسي لـ net.pipe يتم تجاهله بواسطة IIS.بدلاً من ذلك ، أحصل على اسم المضيف الحقيقي للآلة ، وعنوان عنوان net.pipe الذي يبدو أنه تم تنسيقه بالكامل بواسطة IIS.

<wsdl:port name="NetNamedPipeBinding_IAdministration" binding="tns:NetNamedPipeBinding_IAdministration">
   <soap12:address location="net.pipe://realhostname/service/Administration.svc"/>
   <wsa10:EndpointReference>
       <wsa10:Address>net.pipe://realhostname.com/service/Administration.svc</wsa10:Address>
       <Identity>
          <Spn>host/realhostname.com</Spn>
       </Identity>
   </wsa10:EndpointReference>
</wsdl:port>

مع عدم وجود تحكم في طريقة تشكيل أسماء net.pipe ، لن أتمكن من التمييز بين مثيلات خدمة العملاء المتعددة على الجهاز.هل لدى أي شخص أي فكرة عن كيفية الشبكة المسماة ربط الأنابيب URN يمكن التحكم فيها داخل بيئة IIS؟

(أقوم بالكثير من استضافة net.pipe المستقلة أثناء الاختبار (على سبيل المثال.مضيف الخدمة الجديد ()) لذلك أعلم أن روابط net.pipe الخاصة بي تعمل خارج IIS ، وتسمح بالتحكم على الأنبوب المسمى بالضبط URN المستخدم)

إذا تعذر التحكم في الأسماء داخل IIS - فهل لدى أي شخص أي خبرة في استضافة والوصول إلى مثيلات خدمة net.pipe منفصلة متعددة على نفس الشيء آلة؟

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

المحلول

وهذا هو السؤال القديم، ولكنني أحسب أنني أود أن أضيف جوابي منذ أن كنت في حاجة أيضا جوابا لهذا (وربما هناك آخرون هناك الذين في حاجة إليها أيضا).

ويتم التحكم في العنوان الأساسي من خدمة WCF في استضافة IIS من IIS ولا يمكن تجاوز في الملف web.config. بدلا من ذلك، يمكنك التحكم في عناوين أساسية عن طريق تحديث معلومات الموقع IIS ملزمة للموقع كنت استضافة الخدمة الخاص بك في.

ومعظم الوثائق وجدت على الانترنت يقترح باستخدام * كما التكوين ملزمة لnet.pipe. ولكن إذا كنت بدلا من استخدام "virtualsite.com" كقيمة التكوين ملزمة، العنوان الأساسي من نقطة النهاية net.pipe الخاص بك سيكون "virtualsite.com" بدلا من اسم الجهاز.

وهنا مثال باستخدام appcmd لتكوين موقع في IIS مع net.pipe الصحيح ملزم:

%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.pipe',bindingInformation='virtualhostname.com']

وملاحظة واحدة حول على HostnameComparisonMode ، أو يكون له أي تأثير في IIS وفقا ل<لأ href = "http://msdn.microsoft.com/en-us/library/system.servicemodel.hostnamecomparisonmode٪ 28V = vs.110٪ 29.aspx "يختلط =" نوفولو "> MSDN :

<اقتباس فقرة>   

وهذه القيم ليس لها أي أثر عند استخدامها داخل خدمات معلومات إنترنت (IIS) أو عملية خدمة Windows تفعيل (WAS) استضافة البيئة. في تلك الحالات، يستخدم WCF أيا كان وضع مقارنة اسم المضيف يتم توفيرها من قبل موقع ويب IIS استضافة خدمات WCF.

وبدلا من ذلك، لديك لاستخدام آلية وصفتها أعلاه. وأنا أحسب هذا من خلال التحقيق في كيفية المضيف يعمل في HTTP لIIS ملزمة. للأسف، لقد لم تتمكن من العثور على أي وثائق رسمية لهذا السيناريو القائم على IIS لينقل WCF آخرين.

نصائح أخرى

يبدو أنه تم تجاهل جزء اسم المضيف من URI واستبداله بالتنفيذ بناءً على HostNameComparisonMode الخاص بربط القناة.يمكنك محاولة تغييره إلى "تام" عبر تكوين الخدمة...

http://msdn.microsoft.com/en-us/library/system.servicemodel.netnamedpipebinding.hostnamecomparisonmode.aspx

NetNamedPipeBinding.HostnameComparisonMode قيمة HostnameComparisonMode التي تشير إلى ما إذا كان اسم المضيف مستخدمًا للوصول إلى الخدمة عند مطابقة URI.القيمة الافتراضية هي StrongWildcard()، والتي تتجاهل اسم المضيف في المباراة.

راجع بناء جملة التكوين هنا:http://msdn.microsoft.com/en-us/library/ms731291.aspx

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