سؤال

يستخدم طلبي خادمًا صغيرًا لخادم بعض الملفات ولديه واجهة ويب للإدارة عن بُعد. في الوقت الحالي ، يتعين على المستخدم استخدام NetSh لتسجيل URI مثل ذلك

netsh http add urlacl url=http://+:1233/ user=Chris-PC\Chris

وهو ليس ممتعًا للمستخدم العادي. أود أن يتمكن البرنامج من الاستماع على أي منفذ محدد من قبل المستخدم من البرنامج دون الحاجة إلى المستخدم النهائي إلى استخدام موجه الأوامر. هل هناك على أي حال لإنجاز هذا أقل من استخدام العملية. بدء تشغيل وتشغيل موجه الأوامر بنفسي؟

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

المحلول

لقد كتبت هذا لرفع الجوارب وإضافة إدخالات ACL HTTP من خلال Netsh.

سيُطلب من المستخدمين إجراء تغييرات على نظامهم ، لكنه أفضل من لا شيء. قد ترغب في القيام بذلك استجابة ل addressAccessdeniedException

public static class NetAclChecker
{
    public static void AddAddress(string address)
    {
        AddAddress(address, Environment.UserDomainName, Environment.UserName);
    }

    public static void AddAddress(string address, string domain, string user)
    {
        string args = string.Format(@"http add urlacl url={0} user={1}\{2}", address, domain, user);

        ProcessStartInfo psi = new ProcessStartInfo("netsh", args);
        psi.Verb = "runas";
        psi.CreateNoWindow = true;
        psi.WindowStyle = ProcessWindowStyle.Hidden;
        psi.UseShellExecute = true;

        Process.Start(psi).WaitForExit();
    }
}

نصائح أخرى

إذا كنت تستخدم httplistener ، فيجب عليك استخدام httpconfig.exe أو netsh لتكوين httplistener الخاص بك ، لأنه:

A. Afaik لا يوجد واجهة برمجة تطبيقات للقيام بذلك من C#، فقط أدوات سطر الأوامر

بشكل افتراضي ، يمكن للنظام أو مجموعة المسؤولين المحليين الاستماع إلى بادئات HTTP

لذا ... إذا كان تطبيقك يعمل ضمن حساب المستخدم ، فأنت بحاجة إلى منح الوصول بشكل صريح (باستخدام httpcfg.exe أو netsh) لأن httphandler تستخدم http.sys لمشاركة المنافذ مع خادم الويب قيد التشغيل (حتى تتمكن من استضافة خاصة بك تطبيق الويب على المنفذ 80 أثناء تشغيل IIS على المنفذ 80 أيضًا).

قد يكون الحل الأفضل هو استخدام خادم ويب مدمج فعلي للاستماع إلى المنفذ الذي تحتاجه. لن يعمل هذا إذا كان هناك تطبيق آخر (على سبيل المثال) يستخدم بالفعل المنفذ ، ولكن نظرًا لأن هذا لا يستخدم HTTP.SYS لتبادل المنفذ ، فلا توجد قيود أمان حول حساب المستخدم الذي يفتح /يستمع على المنفذ . نظرًا لأنك تريد من المستخدم تحديد منفذه الخاص ، يبدو من المقبول تشغيله على منفذ آخر إلى جانب المنفذ 80.

تقوم شركتي بعمل منتج تجاري يسمى خادم الويب Neokernel (http://www.neokernel.com) الذي يعمل ASP.NET ويتيح لك بدء/إيقاف الخادم برمجيًا وتعيين التكوينات ؛ يمكنك تضمين هذا التجميع وتوزيعه مع التطبيق.

يوجد أيضًا رمز مصدر Cassini الذي يمكنك تعديله وتضمينه ، فهو مجاني ولكن لديه بعض العيوب مثل عدم وجود دعم أو دعم SSL.

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