Я уже начал задавать этот вопрос, но думаю, что, возможно, мне придется перефразировать его. У меня есть веб-приложение 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>");
}
}
}