هل يمكن تغيير موقع WebServicehost لتجنب استخدام HTTPlistener؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

أنا أبحث عن وسيلة لاستخدام WCF WebServicehost دون الحاجة إلى الاعتماد على فئة HTTPlistener ومشاكل الإذن المرتبطة (انظر هذا السؤال للتفاصيل).

أنا أعمل في أحد التطبيقات التي تتصل محليا بتطبيق آخر (طرف ثالث) عبر برودة API.

في الوقت الحالي، نستخدم WCF كخادم HTTP مضمن. نقوم بإنشاء WebServiceHost على النحو التالي:

String hostPath = "http://localhost:" + portNo;
WebServiceHost host = new WebServiceHost(typeof(IntegrationService), new Uri(hostPath));

// create a webhttpbinding for rest/pox and enable cookie support for session management
WebHttpBinding webHttpBinding = new WebHttpBinding();
webHttpBinding.AllowCookies = true;

ServiceEndpoint ep = host.AddServiceEndpoint(typeof(IIntegrationService), webHttpBinding, "");

host.Open()

ChannelFactory<IIntegrationService> cf = new ChannelFactory<IIntegrationService>(webHttpBinding, hostPath);
IIntegrationService channel = cf.CreateChannel();

كل شيء يعمل بشكل جيد طالما يتم تشغيل تطبيقنا كمسؤول. إذا قمت بتشغيل تطبيقنا على جهاز دون امتيازات إدارية، فسيقوم Host.Open () برمي httplisteneRexception مع errorcode == 5 (error_access_denied).

يمكننا النزول حول المشكلة من خلال تشغيل Httpcfg.exe من سطر الأوامر ولكن هذا هو تطبيق سطح المكتب بنقرة واحدة وهذا ليس حقا كمحل طويل الأجل بالنسبة لنا.

يمكننا تخليص WCF واكتب خادم HTTP الخاص بنا ولكني أود تجنب ذلك إن أمكن.

ما هي أسهل طريقة لاستبدال httplistener مع مقبس TCP القياسي أثناء الاستلام باستخدام جميع سقالات HTTP المتبقية التي يوفرها WCF؟

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

المحلول

يمكنك بسهولة إنشاء مكدساتك الخاصة عبر التركيز، باستخدام أشياء بروتوكول المستوى الأعلى "كما هو"، وتدحرج الإصدار الخاص بك من httptransport غير المدعوم من httplistener أو IIS. هل قادرة، بالتأكيد، لكنها الكثير من العمل. خذ بت الموجودة HttpTransport Bits مع عاكس - هناك الكثير من الأجزاء المتحركة هناك. ربما يمكنك اختراق POC بسيطة على المقبس في يوم أو يومين إذا كنت لا تحتاج إلى أي شيء يتوهم مثل HTTPS أو Chunking، ولكن جعلها قوية ستكون صعبة. هنا'SA مختمة جيدة من مجموعة من الموارد (قد تكون مؤرخة بعض الشيء الآن).

نصائح أخرى

مشكلتك غير مرتبطة httplistener.

مشكلتك هي: * لديك تطبيق OneClick مع أذونات محدودة تحاول فتح منفذ خادم.

هذا هو تناقض. يجب ألا يفتح تطبيق إذن محدود غير موثوق به منفذ خادم. هذا هو السبب في أن هذا غير مسموح به لكل تعريف.

هل حاولت فتح منفذ المقبس العادي؟ لا ينبغي أن تعمل أيضا.

بشكل عام، يجب ألا تستضيف تطبيقات المستخدم النهائية المحدودة خدمة ويب؛)

ومع ذلك، كنت في وضع مماثل في محاولة لاستخدام WCF في سيناريو اتصال للسائق - أشكر الجنة طلبي يعمل بإذن كامل.

يمكنك أيضا أن ننظر إلى تمزيق بما فيه الكفاية كاسيني لجعلها قابلة للضحك في التطبيق الخاص بك، وتحميل خط أنابيب WCF في هناك (عبر ملفات .svc ومعالج تنشيط الخدمة) - لا يتطلب كتابة كود جديد للغاية بهذه الطريقة، ولكن لا يزال يمنحك موقع الويب القوي والاختبار إلى حد ما.

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