2010-07-20 4 views
0

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

Любая идея, что может вызвать ошибку?

код в веб-части заключается в следующем:

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 в веб-части в папке бин и в файле web.config есть запись для веб-пар в качестве безопасного управления. Другой веб-сайт, который отображает сообщение «hellow world», также загружается в производство таким же образом. Я догадываюсь, что это код, который вызывает проблему.

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

+1

из почти нулевой информации, которую вы предоставили? Я сомневаюсь в этом ... –

+1

Можете ли вы разместить свой код, который использует 'SPSite', а также сведения об исключении. Как сказал @Mitch, в вашем вопросе нет ничего, что могло бы помочь нам помочь :) –

+1

И когда вы отправляете код и подробности об исключении, мы также хотели бы знать, находится ли веб-страница в папке GAC или bin –

ответ

1

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

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

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

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

Шейн

0

Объект по 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");