IIS W3WP.exe上的比利时身份证功能崩溃

时间:2011-10-11 11:23:09

标签: c# asp.net iis-7.5 w3wp.exe

我的注册工具有一项功能,允许考生从ID加载他们的个人信息(如姓名,地址等)。

当我在VS2010中使用内置网络服务器编译应用程序时,按下按钮将ID信息加载到文本框中,没有问题。当我在localhost(使用IIS)上发布它时,当我按下按钮时它会崩溃。

这是我在事件查看器中收到的内容:

     0 
   APPCRASH 
   Not available 
   0 
   w3wp.exe 
   7.5.7601.17514 
   4ce7a5f8 
   KERNELBASE.dll 
   6.1.7601.17651 
   4e211319 
   e0434352 
   0000b9bc 

   0 
   7e796e20-f3e1-11e0-8ea3-60eb69b01829 
   0 

我正在使用64位笔记本电脑,使用比利时身份证SDK。

在这里,您可以找到按钮的代码;

        protected void Button1_Click(object sender, EventArgs e)
    {
        //READ eID
        ClearTextBoxes();
        try
        {
            BEID_ReaderSet ReaderSet;
            ReaderSet = BEID_ReaderSet.instance();

            BEID_ReaderContext Reader;
            Reader = ReaderSet.getReader();

            bool bCardPresent = Reader.isCardPresent();

            if (Reader.isCardPresent())
            {
                if (Reader.getCardType() == BEID_CardType.BEID_CARDTYPE_EID
                    || Reader.getCardType() == BEID_CardType.BEID_CARDTYPE_FOREIGNER
                    || Reader.getCardType() == BEID_CardType.BEID_CARDTYPE_KIDS)
                {
                    try
                    {
                        Load_eid(Reader);
                    }
                    catch (Exception ex)
                    {
                        labelEx.Text = ex.Message;
                    }
                }
                else
                {
                    labelEx.Text = "No valid card, please insert a valid IDcard";
                }
            }

            else
            {
                labelEx.Text = "No IDcard found, please insert your card";
            }

            BEID_ReaderSet.releaseSDK();
        }

        catch (BEID_Exception ex)
        {
            BEID_ReaderSet.releaseSDK();
            labelEx.Text = "No valid cardreader found, please connect a valid reader";

        }

        catch (StackOverflowException ex)
        {
            BEID_ReaderSet.releaseSDK();
            labelEx.Text = "Error: " + ex;
        }

        catch (OutOfMemoryException ex)
        {
            BEID_ReaderSet.releaseSDK();
            labelEx.Text = "Error: " + ex;
        }
    }

        private void Load_eid(BEID_ReaderContext Reader)
    {
        try { 
        BEID_EIDCard card;
        card = Reader.getEIDCard();
        if (card.isTestCard())
        {
            card.setAllowTestCard(true);
        }

        BEID_EId doc;
        doc = card.getID();

        txtFirstN.Text = doc.getFirstName();
        txtLastN.Text = doc.getSurname();
        txtDOB.Text = doc.getDateOfBirth();

        //CUT GETSTREET IN STREET AND HOUSENO
        string street= doc.getStreet();
        string[] words = street.Split(' ');

        txtStreet.Text = words[0];
        txtHouseNo.Text = words[1];

        txtPostalCode.Text = doc.getZipCode();
        txtCity.Text = doc.getMunicipality();
        //sText += "Country = " + doc.getCountry() + "\r\n";

        }

        catch (Exception ex)
        {
            BEID_ReaderSet.releaseSDK();
            labelEx.Text = "Error: " + ex;
        }
    }

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您的应用程序池很可能是在没有访问读卡器权限的用户下运行的。这会导致驱动程序错误,这可能导致w3wp.exe进程崩溃。

将其更改为专用用户并为该用户分配适当的权限,或者出于测试目的,将其设置为在localsys下运行。

答案 1 :(得分:0)

将您的代码移至Javascript(在浏览器/ html中)。

我认为IIS用户无权与ID读取器API进行通信。