在iis 7上托管时,Web应用程序中的线程会使会话超时

时间:2012-10-04 13:36:11

标签: c# asp.net iis

在我的asp.net应用程序中,我使用windows forms.dll通过创建一个线程来使用一些Windows控件。这在我的系统中工作正常但在IIS上托管时会给出会话超时。 创建一个线程使我在IIS上的会话超时。 如何创建可在IIS上正常工作的线程?

以下是iam创建线程的代码。

public string[] DisplayFileDialog()
    {
        string[] result = null;

        try
        {
            Thread objThread = new Thread(state =>{
                result = FnOpenFileDialog();
                // TODO: do something with the returned result
            });

            objThread.IsBackground = false;
            objThread.SetApartmentState(ApartmentState.STA);
            objThread.Start();
            objThread.Join();
            return result;

        }
        catch (Exception ex)
        {


            return result;
        }

 protected string[] FnOpenFileDialog()
    {
        IntPtr hdlr = GetForegroundWindow();

        WindowWrapper Mockwindow = new WindowWrapper(hdlr);

        OpenFileDialog fDialog = new OpenFileDialog();

        fDialog.Title = "Select Files";

        fDialog.Multiselect = true;
        fDialog.CheckFileExists = true;
        fDialog.CheckPathExists = true;

        System.Windows.Forms.DialogResult dr = fDialog.ShowDialog(Mockwindow);
        string[] filenames = fDialog.FileNames;
        return filenames;
    }

提前致谢。

2 个答案:

答案 0 :(得分:1)

您的代码是在服务器端执行的,这就是您因超时响应而停滞的原因。您的主线程等待(objThread.Join)在服务器上打开的对话框的响应,因为您无法在客户端看到它从未得到响应。

如果要在客户端打开对话框文件,可以采用与ActiveX对象类似的方式执行此操作。

你可以在以下地址找到msdn教程,但它只适用于IE:

http://msdn.microsoft.com/fr-fr/magazine/cc301932(en-us).aspx

答案 1 :(得分:0)

如果我正确理解你的问题,答案很简单:你做不到。

Windows窗体控件在浏览器中不起作用。它适用于您的计算机,因为浏览器窗口是本地的,因此线程可以附加到它并将其用作父级。

IIS进程没有窗口,只提供文本,图像和视频文件。你本质上是要求在其他地方的服务器机房的某台机器上运行的IIS线程连接到别人机器上的浏览器窗口,然后开始在其上显示Windows Forms控件。

如果他们在Linux机箱或Mac上怎么办?

创建ASP.NET是为了解决为IIS创建交互式表单的问题。

希望这有帮助。