Получить элементы из списка Sharepoint - PullRequest
0 голосов
/ 17 октября 2011

Я пытаюсь получить элементы из списка в sharepoint, но у меня есть некоторые проблемы, это трудно объяснить, поэтому посмотрите на код:

        try
        {
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\log\Steps_" + DateTime.Now.Day + "_at_" + DateTime.Now.Hour + "h" + DateTime.Now.Minute + ".txt", true))
            {
                if (SPSite.Exists(new Uri(Url)))
                {
                    using (SPSite site = new SPSite(Url))
                    {
                        file.WriteLine("step 1 : " + DateTime.Now.Hour + "h" + DateTime.Now.Minute + " " + DateTime.Now.Second + "s " + DateTime.Now.Millisecond + "ms ");
                        SPList list = site.AllWebs[""].Lists["CrmInfo"];
                        file.WriteLine("step 2 : " + DateTime.Now.Hour + "h" + DateTime.Now.Minute + " " + DateTime.Now.Second + "s " + DateTime.Now.Millisecond + "ms ");
                        var items = list.GetItems();
                        file.WriteLine("step 3 : " + DateTime.Now.Hour + "h" + DateTime.Now.Minute + " " + DateTime.Now.Second + "s " + DateTime.Now.Millisecond + "ms ");
                        foreach (SPListItem item in list.Items)
                        {
                            if (item.Name.Equals("serverName"))
                                serverName = (string)item["Value"];

                            if (item.Name.Equals("orgName"))
                                orgName = (string)item["Value"];

                            if (item.Name.Equals("userName"))
                                userName = (string)item["Value"];

                            if (item.Name.Equals("userPassword"))
                                userPassword = (string)item["Value"];

                            if (item.Name.Equals("userDomain"))
                                userDomain = (string)item["Value"];                            }
                    }
                }
            }
        }
        catch (Exception e)
        {
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\log\error_" + DateTime.Now.Day + "_at_" + DateTime.Now.Hour + "h" + DateTime.Now.Minute + ".txt", true))
            {
                file.WriteLine("An error occured on {0}th at {1}h{2}", DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute);
                file.WriteLine(e.Message);
            }
        }

Вот проблема: если я удаляю

using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\log\Steps_" + DateTime.Now.Day + "_at_" + DateTime.Now.Hour + "h" + DateTime.Now.Minute + ".txt", true))

(со всеми соответствующими file.WriteLine ...), и я развернул свою функцию на sharepoint, я получил 500 внутреннюю ошибку сервера. Если я позволю этому так, это работает, но я хочу удалить эту часть.

Может кто-нибудь сказать мне, что не так? Я действительно не понимаю ... Спасибо.

edit: если я удаляю все file.WriteLine ... при развертывании, он создает файл Steps_xxxx.txt, который является пустым (логика), но ловит исключение: The process cannot access the file 'C:\log\Steps_17_at_12h22.txt' because it is being used by another process. Но я нигде больше этим не пользуюсь!

Редактировать: Новый элемент, я получаю это в моем лог-файле

Ошибка произошла 20-го числа в 11 ч. 3 м. Время ожидания канала запроса при ожидании ответа после 00: 00: 43.5159686. Увеличьте значение тайм-аута, переданное вызову Request, или увеличьте значение SendTimeout в Binding. Время, отведенное для этой операции, могло быть частью более длительного времени ожидания. System.TimeoutException: HTTP-запрос к 'http://localhost:32843/SecurityTokenServiceApplication/securitytoken.svc' превысил установленное время ожидания 00:01:00. Время, отведенное для этой операции, могло быть частью более длительного времени ожидания. ---> System.Net.WebException: срок действия операции истек в System.Net.HttpWebRequest.GetResponse () в System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply (TimeSpan timeout) --- Конец внутренней трассировки стека исключений --- в System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException (WebException webException, запрос HttpWebRequest, HttpAbortReason abortReason) в System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply (TimeSpan timeout) в System.ServiceModel.Channels.RequestChannel.Request (сообщение-сообщение, время ожидания TimeSpan) mscorlib

Я немного искал изменение времени ожидания client.config (с 00:00:20 до 00:02:00), но все еще не работает ...


На самом деле существует один вопрос для решения этой проблемы:

Почему я не могу использовать SPSite в своей функции?


Я нашел способ отладки кода при запуске сайта sharepoint (используя Debug-> Attach to process ...), и я попытался с этим:

if (SPContext.Current.Site.RootWeb.Site!=null)
            {
                using (SPSite site = SPContext.Current.Site.RootWeb.Site)
                {

Моя точка останова находится на этой первой строке, а SPContext.Current.Site.RootWeb.Site пусто ... Не понимаю, почему. затем в файле журнала, который я создал, я вижу это: Ссылка на объект не установлена ​​для экземпляра объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...