Веб-приложение Asp.net не отображается на клиентских рабочих станциях - PullRequest
1 голос
/ 23 июня 2011

Я уже начал задавать этот вопрос, но думаю, что, возможно, мне придется перефразировать его. У меня есть веб-приложение asp.net, которое я создал в VS2010 и опубликованное на нашем сайте Sharepoint. Этот сайт в основном представляет собой форму для выполнения запросов на изменение статуса сотрудника, и мне нужно заполнить раскрывающиеся списки из запроса к активному каталогу. Я все это настроил и работает фантастически ... на нашем сервере, но когда я захожу на сайт с рабочей станции, я получаю ошибку экземпляра и выбрасываю нулевую ссылку Похоже, это говорит мне о том, что он не использует методы запросов к активным каталогам.

Вот ошибка:

    Server Error in '/Requests' Application.

Object reference not set to an instance of an object. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  

Stack Trace: 


[NullReferenceException: Object reference not set to an instance of an object.]
   System.Web.UI.WebControls.ListControl.PerformDataBinding(IEnumerable dataSource) +562
   System.Web.UI.WebControls.ListControl.PerformSelect() +48
   RequestForm._Default.Page_Load(Object sender, EventArgs e) +1464
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +24
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +41
   System.Web.UI.Control.OnLoad(EventArgs e) +131
   System.Web.UI.Control.LoadRecursive() +65
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2427

Вот adquery, который в основном просто загружает список:

 public PreLoadForm()
        {
            //empty constructor calls the search method when class is instantiated
            ADSearch();
            //and sorts the array
            SortList(groups);
        }


        public string[] Groups //property to pass the groups array over to the calling class
        {
            get
            {
                return groups;
            }
        }


        protected void ADSearch()
        {
            //The Active Directory Search

            int x; //index variable for loading array

            domainName = "******"; //the domain

            theQuery = "(&(objectClass=group)(description=branch*))"; //the query statement

            groups = new string[14]; //instantiating the groups array

            #region
            theEntry = new DirectoryEntry("LDAP://DC=" + domainName + ", DC=***", "*******", "*********"); //LDAP entry
            #endregion
            theSearch = new DirectorySearcher(theEntry); //new search of the directory using the entry to connect

            theSearch.Filter = theQuery; //use our query statement for a search filter

            theSearch.PropertiesToLoad.Add("name"); //the value we want back from the search

            try
            {
                //assign the the search findings to a results collection
                mySearchResultColl = theSearch.FindAll();
            }
            catch
            {

            }


            x = 0;

            try
            {
                //loop through the search results
                foreach (SearchResult sr in mySearchResultColl)
                {
                    DirectoryEntry de = sr.GetDirectoryEntry(); //assign the search entries to a directory entry
                    groups[x] = de.Properties["name"].Value.ToString(); //assign the desired value to the array
                    x++; //increment the index

                }
            }
            catch
            {

            }
        }

Загрузка страницы:

 protected void Page_Load(object sender, EventArgs e)
        {
            //when the form loads, instantiate the preLoadForm
            LoadForm = new PreLoadForm();

            unselectedArray = new string[numOfOffices]; //instantiate the unselected array

            unselectedArray = LoadForm.Groups; //and load the array from Active Directory

            if (!Page.IsPostBack) //if page has not be reloaded
            {
                //disable certain entries until selected
                officesDropDownList.Enabled = false;
                equipDropDownList.Enabled = false;
                positionTextBox.Enabled = false;
                managerTextBox.Enabled = false;
                terminationTextBox.Enabled = false;
                pcCheckBox.Enabled = false;
                laptopCheckBox.Enabled = false;


                for (int x = 0; x < numOfOffices; x++) //loop the number of times we have offices
                {
                    removeListBox.Items.Add(unselectedArray[x]); //populate the remove list box with the unselected arrarry
                }

                for (int i = 0; i < LoadForm.EmailGroups.Count; i++) //similar loop for populating email list box
                {
                    removeEmailListBox.Items.Add(LoadForm.EmailGroups.ElementAt<string>(i)); //populate from a list
                    //due to the unkown size nature of the email groups
                }

                try
                {
                    officesDropDownList.DataSource = unselectedArray; //quick and dirty way to load the drop down list with our offices
                    officesDropDownList.DataBind();
                    equipDropDownList.DataSource = unselectedArray; //used to be LoadForm.Groups
                    equipDropDownList.DataBind();
                }
                catch (NullReferenceException exceptEx)
                {
                    string messageString = exceptEx.ToString();
                    Response.Write(@"<script language='javascript'>" + messageString + "</script>");
                }

            }
        }

1 Ответ

0 голосов
/ 23 июня 2011

Стараюсь изо всех сил следовать вашему коду здесь. Сначала трассировка стека показывает, что вызов проходит по линии 1464

RequestForm._Default.Page_Load(Object sender, EventArgs e) +1464

Я просто предположу, что для краткости вы убрали дополнительные строки, но для загрузки страницы требуется много кода.

Эти две строки являются избыточными:

unselectedArray = new string[numOfOffices]; //instantiate the unselected array
unselectedArray = LoadForm.Groups; //and load the array from Active Directory

unselectedArray просто получит замену на то, что будет возвращено LoadForm.Groups похоже, он заполняется из PreLoadForm.ADSearch(), что дает Groups значение. Мне интересно, как вы пришли с 14? Почему бы просто не использовать List<string>?

Мое предложение состоит в том, чтобы не иметь два блока попытки ... поймать, где вы глотаете исключения. Это плохая практика. Выясните, если и почему там создаются исключения. Это, вероятно, приблизит вас к вашей проблеме.

...