WCF بدون http.sys
سؤال
عند استخدام ربط HTTP في WCF ، أحتاج إلى منح أذونات خاصة ليتمكن من ربط هذا المنفذ/المسار. أنا أفهم هذا لأن WCF يقبل حركة المرور HTTP من خلال http.sys سائق.
في الأيام الخوالي ، يمكننا أن نربح مقبسًا وربط أي منفذ قديم لم يكن قيد الاستخدام ، دون أن نكون مسؤولاً. لا يزال Nettcpbinding قادرًا على القيام بذلك.
إذا كنت لا أهتم بـ HTTP.Sys ، فهل هناك طريقة لإخبار WCF بعدم استخدامه ، وبدلاً من ذلك لفتح مقبس قديم منتظم مع الاستمرار في استخدام روابط HTTP؟
المحلول
تعتمد الارتباطات المستندة إلى WCF HTTP على HttpListener
فئة التي تتم إدارتها حول HTTP API. يعتمد HTTP API على الطريقة التي تطلب بها نظام التشغيل HTTP. لذلك إذا كنت تستخدم نظام التشغيل الذي يستخدم برنامج تشغيل http.sys (Windows 2003 وأحدث) ، فأنت تعتمد عليه.
يحرر:
بناءً على حجة جيدة جدًا حول كاسيني ، قضيت ساعتين في العاكس. الوصف التالي هو افتراضي فقط. لم أجد أي معلومات حول هذا الموضوع ، لذلك ربما أكون مخطئًا تمامًا.
يحتوي WCF داخليًا على بعض الفصول المجردة المسمى HttpTransportManager
هذه الفئة مشتقة من الفصول الداخلية HostedHttpTransportManager
و SharedHttpTransportManager
(هذا واحد موجود أيضا في إصدار HTTPS). السابق لا يعتمد على HttpListener
لكن الأخير هو. يتم استخدام السابق عند استضافة WCF في خط أنابيب ASP.NET - الفصول الداخلية HttpModule
و HttpHandler
من System.ServicEmodel.Activing Assembly استخدام HostedHttpRequestAsyncResult
يعتمد على HostedHttpTransportManager
. يتم استخدام اللاحق عندما HttpChannelListener
يتم إنشاؤه (استضافة الذات).
استنتاجي هو أن خدمة WCF المستضافة في خط أنابيب ASP.NET لا تعتمد بشكل مباشر على http.sys ولكن IIS تستضيف خط الأنابيب. يتيح ذلك إنشاء خادم ويب مخصص لن يعتمد على http.sys ولكنه سيكون قادرًا على استضافة ASP.NET و WCF. أعتقد أن هذا ما يفعله كاسيني. تعتمد خدمة WCF المستضافة ذاتيًا دائمًا على http.sys.
كما كتبت أعلاه هذا هو مجرد تخمين بلدي بناء على بعض الهندسة العكسية السريعة.