webpart работает на локальном сервере, но не работает на производстве, когда в веб-части используется класс SPSite - PullRequest
0 голосов
/ 20 июля 2010

веб-часть работает на локальном сервере, но не работает на рабочем сервере, когда в веб-части используется класс «SPSite».На рабочем сервере выдает ошибку.Если я не использую этот класс в веб-части, веб-часть также будет работать на работающей машине.

Есть идеи, что может вызвать ошибку?

код в веб-части такой:*

namespace CompanyNews
{
    [Guid("40de3c60-9e30-4050-b9f3-01e71868f522")]
    public class CompanyNews : System.Web.UI.WebControls.WebParts.WebPart
    {
        private HtmlTextWriter writer;
        public CompanyNews()
        {
        }
        protected override void RenderContents(HtmlTextWriter writer)
        {
            base.RenderContents(writer);
            using (SPSite site = SPContext.Current.Site)
            {
                using (SPWeb web = site.OpenWeb())
                {
                    string listName = "News Display";
                    writer.Write(listName);
                    SPList list = null;
                    foreach (SPList currentList in web.Lists)
                    {
                        if (currentList.Title.Equals(listName,
                                                     StringComparison.InvariantCultureIgnoreCase))
                        {
                            list = currentList;
                            break;
                        }
                    }
                    writer.WriteBeginTag("ul");
                    foreach (SPListItem item in list.Items)
                    {                    
                        writer.Write("<li style=\"font-size:12px;padding:1px\">");
                        writer.Write(item["Title"].ToString() + "...   ");
                        writer.Write("<a class=\"smallerred\" href=\"#\">Read More</a>");
                        writer.Write("</li>");
                    }
                    writer.WriteEndTag("ul");
                }
            }
        }

    }
}

DLL веб-части находится в папке bin, а в файле web.config есть запись для веб-пар в качестве безопасного элемента управления.Другая веб-часть, которая отображает сообщение «hellow world», также загружается в производство аналогичным образом.Я думаю, это код, который вызывает проблему.

Сообщение об ошибке: «Произошла ошибка при предварительном просмотре веб-части»

Ответы [ 2 ]

1 голос
/ 21 июля 2010

только что я заметил, вы не должны заключать объекты из текущего контекста в оператор использования.Хорошая статья здесь Clicky

Лучше было бы использовать следующее

using (SPSite mySite = new SPSite(SPContext.Current.Site.Url))
{
...
} 

Также вам следует взглянуть на упаковку вашего решения в WSP, что позволяет stsadm для развертыванияЭто.Перетаскивание в GAC не очень хорошая практика.

Шейн

0 голосов
/ 28 июля 2010

Объект SPSite не получает ссылки нигде, которую я вижу. Почему бы вам не удалить его, так как это излишне для ваших нужд?

SPWeb web = SPContext.Current.Web;  
                string listName = "News Display"; 
                writer.Write(listName); 
                SPList list = null; 
                foreach (SPList currentList in web.Lists) 
                { 
                    if (currentList.Title.Equals(listName, 
                                                 StringComparison.InvariantCultureIgnoreCase)) 
                    { 
                        list = currentList; 
                        break; 
                    } 
                } 
                writer.WriteBeginTag("ul"); 
                foreach (SPListItem item in list.Items) 
                {                     
                    writer.Write("<li style=\"font-size:12px;padding:1px\">"); 
                    writer.Write(item["Title"].ToString() + "...   "); 
                    writer.Write("<a class=\"smallerred\" href=\"#\">Read More</a>"); 
                    writer.Write("</li>"); 
                } 
                writer.WriteEndTag("ul"); 
...