我在Windows Server 2008 R2上的IIS7上的MVC 4中设置了一个简单的网站(没有CSS,没有JS)。简单的HTML是由后端中的一个简单的蜘蛛生成的,它在一个论坛中登录并获取几行HTML代码,将其剥离并最终生成HtmlString
。 MVC视图正在使用生成的字符串。 View调用其Controller的公共静态方法。
当我第一次访问该网站时,它可以正常工作几个小时。然后每隔一段时间就会出现这个错误:
对象引用未设置为对象的实例。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.NullReferenceException:不是对象引用 设置为对象的实例。
来源错误:
第6行:第7行:第8行: @ ns.Controllers.HomeController.getIndex()
源文件:c:\ pathTo \ Views \ Home \ Index.cshtml行: 8
堆栈追踪:
[NullReferenceException:对象引用未设置为的实例 object。] SimpleBrowser.Browser.get_XDocument()+92
SimpleBrowser.Browser.Find(String id)+52
ns.Controllers.HomeController.getIndex()+93 ASP._Page_Views_Home_Index_cshtml.Execute()in c:\ pathTo \ Views \ Home \ Index.cshtml:8 [/]
这是有问题的控制器(注意:我使用的是SimpleBrowser库):
public class HomeController : Controller
{
public static HtmlString getIndex()
{
string URI = @"uri";
var browser = new Browser();
browser.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10";
// login
browser.Navigate(URI);
browser.Find("username").Value = "user";
browser.Find("password").Value = "pass";
browser.Find(ElementType.Button, "name", "login").Click();
browser.Navigate("otheruri");
var html = new StringBuilder();
foreach (var item in browser.Select(".phpbb_row"))
{
html.Append("<dl>");
html.Append("<dt>");
html.Append("<a href=\"http://prefix");
html.Append(item.Select(".topictitle").GetAttribute("href"));
html.Append("\">");
html.Append(item.Select(".topictitle").Value);
html.Append("</a>");
html.Append("<dd>");
html.Append(item.Select(".phpbb_posts").Value);
html.Append("</dd>");
html.Append("<dd>");
html.Append(item.Select(".phpbb_lastpost").Value);
html.Append("</dd>");
html.Append("</dt>");
html.Append("</dl>");
}
return new HtmlString(html.ToString());
}
//
// GET: /Home/
public ActionResult Index()
{
return View();
}
}
观点:
@{
ViewBag.Title = "title";
}
datetime: @DateTime.Now
<p />
@ns.Controllers.HomeController.getIndex() // this is where I call the method, and where the NullException occurs.
编辑:访问该网站的用户绝不会超过2位,而且大多数情况下,只有1位用户每天最多会访问该网站30次。
编辑2:ns
只是定义HomeController
的命名空间的名称。或者更确切地说,是项目名称空间的名称。