Это одно и то же, что вы можете подтвердить сами, используя дизассемблер, такой как Reflector. Единственное отличие состоит в том, что DefaultNetworkCredentials
возвращает объект NetworkCredentials
и DefaultCredentials
приводит его к ICredentials
. Таким образом, у вас есть доступ к дополнительной информации с объектом NetworkCredentials, но какие из тех, которые вы используете, предоставляют объекту, требующему экземпляр ICredentials, не имеет значения, поскольку это тот же экземпляр объекта: object.ReferenceEquals(CredentialCache.DefaultCredentials, CredentialCache.DefaultNetworkCredentials)
возвращает true
.
Вы можете разместить среду выполнения 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.
Вы можете использовать команду net для запуска или остановки служб, включая службу, используемую IIS (веб-сервер в Windows).
Убедитесь, что IIS установлен и ваш сайт работает как обычный сайт ASP.Net. Затем установите для типа запуска службы «World Wide Web Publishing» значение «Вручную» вместо «Автоматически». Теперь вы можете запустить его в любой момент, введя такую команду на консоли (и из вашей программы через Process.Start ()
):
net start w3svc
Теперь вы ' у вас будут проблемы с этим, если вы больше думаете о том, чтобы просто сбросить это приложение на любой старый компьютер. Но если приложение предназначено для помощи в управлении определенной системой, все будет в порядке.
Вот хорошая статья по этому поводу: 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);
}
Вы можете использовать класс HttpRuntime. Если нужно, могу предоставить небольшую демонстрацию.