使用 IIS Express 几秒钟后站点停止工作
Site stops working after few seconds with IIS Express
我必须从 WPF 应用程序启动 IIS Express。我可以启动 IISExpress,并在网站上浏览几秒钟。然后,当我单击任何 link 时,它不会加载。然后,如果我关闭 WPF 应用程序,网页会立即响应。我的代码:
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
StartSite();
}
public void StartSite()
{
string path = @"C:\Program Files\IIS Express\iisexpress.exe";
string args = @"/path:C:\Sites /port:9090 /systray:true";
if (!File.Exists(path))
throw new FileNotFoundException();
var process = Process.Start(new ProcessStartInfo()
{
FileName = path,
Arguments = args,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
});
}
猜猜为什么网站只工作了几秒钟,然后关闭启动 iisexpress 的应用程序后又会再次工作?
编辑
我注意到当我在 "Debug" 中构建时会发生这种情况,但是当我在 "Release" 中构建时问题不会发生。
我通过创建 IIS 启动器(控制台应用程序)解决了我的问题。我向这个应用程序传递了一些参数,它启动 IISExpress 然后死了。现在在我的 WPF 应用程序中,我没有为 IISExpress 创建进程,而是为我的启动器创建了一个进程。此外,此控制台应用程序 returns 通过退出代码向 WPF 发送进程 ID。
class Program
{
static void Main(string[] args)
{
if (args == null)
Environment.Exit(-1);
string exeIIS = args[0];
string websitePath = args[1];
string port = args[2];
string argsIIS = MakeIISExpressArgs(websitePath, port);
int processID = LaunchIISExpress(argsIIS, exeIIS);
Environment.Exit(processID);
}
private static int LaunchIISExpress(string argsIIS, string pathExeIIS)
{
var process = Process.Start(new ProcessStartInfo()
{
FileName = pathExeIIS,
Arguments = argsIIS,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
});
return process.Id;
}
private static string MakeIISExpressArgs(string websitePath, string port)
{
var argsIIS = new StringBuilder();
argsIIS.Append(@"/path:" + websitePath);
argsIIS.Append(@" /Port:" + port);
return argsIIS.ToString();
}
}
我必须从 WPF 应用程序启动 IIS Express。我可以启动 IISExpress,并在网站上浏览几秒钟。然后,当我单击任何 link 时,它不会加载。然后,如果我关闭 WPF 应用程序,网页会立即响应。我的代码:
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
StartSite();
}
public void StartSite()
{
string path = @"C:\Program Files\IIS Express\iisexpress.exe";
string args = @"/path:C:\Sites /port:9090 /systray:true";
if (!File.Exists(path))
throw new FileNotFoundException();
var process = Process.Start(new ProcessStartInfo()
{
FileName = path,
Arguments = args,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
});
}
猜猜为什么网站只工作了几秒钟,然后关闭启动 iisexpress 的应用程序后又会再次工作?
编辑
我注意到当我在 "Debug" 中构建时会发生这种情况,但是当我在 "Release" 中构建时问题不会发生。
我通过创建 IIS 启动器(控制台应用程序)解决了我的问题。我向这个应用程序传递了一些参数,它启动 IISExpress 然后死了。现在在我的 WPF 应用程序中,我没有为 IISExpress 创建进程,而是为我的启动器创建了一个进程。此外,此控制台应用程序 returns 通过退出代码向 WPF 发送进程 ID。
class Program
{
static void Main(string[] args)
{
if (args == null)
Environment.Exit(-1);
string exeIIS = args[0];
string websitePath = args[1];
string port = args[2];
string argsIIS = MakeIISExpressArgs(websitePath, port);
int processID = LaunchIISExpress(argsIIS, exeIIS);
Environment.Exit(processID);
}
private static int LaunchIISExpress(string argsIIS, string pathExeIIS)
{
var process = Process.Start(new ProcessStartInfo()
{
FileName = pathExeIIS,
Arguments = argsIIS,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
});
return process.Id;
}
private static string MakeIISExpressArgs(string websitePath, string port)
{
var argsIIS = new StringBuilder();
argsIIS.Append(@"/path:" + websitePath);
argsIIS.Append(@" /Port:" + port);
return argsIIS.ToString();
}
}