Программно запуская сервер HTTP в C#?

Это одно и то же, что вы можете подтвердить сами, используя дизассемблер, такой как Reflector. Единственное отличие состоит в том, что DefaultNetworkCredentials возвращает объект NetworkCredentials и DefaultCredentials приводит его к ICredentials. Таким образом, у вас есть доступ к дополнительной информации с объектом NetworkCredentials, но какие из тех, которые вы используете, предоставляют объекту, требующему экземпляр ICredentials, не имеет значения, поскольку это тот же экземпляр объекта: object.ReferenceEquals(CredentialCache.DefaultCredentials, CredentialCache.DefaultNetworkCredentials) возвращает true.

6
задан 30 October 2009 в 18:35
поделиться

4 ответа

Вы можете разместить среду выполнения ASP.NET внутри консольного приложения. Вот пример:

public class SimpleHost : MarshalByRefObject
{
    public void ProcessRequest(string page, string query, TextWriter writer)
    {
        SimpleWorkerRequest swr = new SimpleWorkerRequest(page, query, writer);
        HttpRuntime.ProcessRequest(swr);
    }
}

class Program
{
    static void Main(string[] args)
    {
        // TODO: Check to see if a given argument has been passed on the command-line

        SimpleHost host = (SimpleHost)ApplicationHost.CreateApplicationHost(
            typeof(SimpleHost), "/", Directory.GetCurrentDirectory());

        HttpListener listener = new HttpListener();
        listener.Prefixes.Add("http://localhost:9999/");
        listener.Start();
        Console.WriteLine("Listening for requests on http://localhost:9999/");

        while (true)
        {
            HttpListenerContext context = listener.GetContext();
            string page = context.Request.Url.LocalPath.Replace("/", "");
            string query = context.Request.Url.Query.Replace("?", "");
            using (var writer = new StreamWriter(context.Response.OutputStream))
            {
                host.ProcessRequest(page, query, writer);
            }
            context.Response.Close();
        }

    }
}

Вы можете получить исключение TypeLoadException при запуске этой программы. Вы должны создать подкаталог bin в вашем текущем каталоге и переместить в него копию исполняемого файла. Это потому, что среда выполнения ASP.NET будет искать подкаталог bin. Другой вариант - поместить SimpleHost в отдельную сборку, которую вы развертываете в GAC.

10
ответ дан 8 December 2019 в 17:23
поделиться

Вы можете использовать команду net для запуска или остановки служб, включая службу, используемую IIS (веб-сервер в Windows).

Убедитесь, что IIS установлен и ваш сайт работает как обычный сайт ASP.Net. Затем установите для типа запуска службы «World Wide Web Publishing» значение «Вручную» вместо «Автоматически». Теперь вы можете запустить его в любой момент, введя такую ​​команду на консоли (и из вашей программы через Process.Start () ):

net start w3svc

Теперь вы ' у вас будут проблемы с этим, если вы больше думаете о том, чтобы просто сбросить это приложение на любой старый компьютер. Но если приложение предназначено для помощи в управлении определенной системой, все будет в порядке.

2
ответ дан 8 December 2019 в 17:23
поделиться

Вот хорошая статья по этому поводу: http://msdn.microsoft.com/en-us/library/aa529311.aspx

Ключ - это использование Microsoft.Web.Services3

Образец кода скопирован из связанной статьи:

public partial class WindowsServiceToHostASMXWebService  : ServiceBase
{
    protected override void OnStart(string[] args)
    {
        Uri address = new Uri("soap.tcp://localhost/TestService");
        SoapReceivers.Add(new EndpointReference(address), typeof(Service ));
    }
    protected override void OnStop()
    {
        SoapReceivers.Clear();
    }
}

и назван:

static void Main()
{
    System.ServiceProcess.ServiceBase[] ServicesToRun;
    // Change the following line to match.
    ServicesToRun = new System.ServiceProcess.ServiceBase[] { new WindowsServiceToHostASMXWebService() };
    System.ServiceProcess.ServiceBase.Run(ServicesToRun);
}
2
ответ дан 8 December 2019 в 17:23
поделиться

Вы можете использовать класс HttpRuntime. Если нужно, могу предоставить небольшую демонстрацию.

0
ответ дан 8 December 2019 в 17:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: