سؤال

عند استخدام ربط 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.

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

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