2013-10-24 124 views
1

我有一個asp.net MVC Web應用程序和一些外部cron作業是從我CronJobController調用特定的URL,並執行類似的具體方法:爲什麼我收到「價值不在預期範圍內」?

/// <summary> 
    /// Will be called externally by www.setcronjob.com. 
    /// </summary> 
    /// <returns></returns> 
    public async Task<ActionResult> Index() 
    { 
     RunTwitterSearchQuery(); 
     RunFacebookSearchQuery(); 
     return new ContentResult { Content = "Ok" }; 
    } 
在RunTwitterSearchQuery

,我想送一些電子郵件,我嘗試既MvcMailerActionMailer,例如(含的ActionMailer):

var mailController = new MailController(); 
mailController.HttpContextBase = this.HttpContext; 
mailController.MoreThanXFollowersEmail(alertEmailModel).Deliver(); 

由於HTTP上下文爲null我必須設置它,這樣既避免NPE但在那之後,我收到一個很奇怪的例外(在兩種MvcMailer和ActionMailer):

System.ArgumentException: Value does not fall within the expected range. 
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo) 
     at System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode) 
     at System.Web.Hosting.IIS7WorkerRequest.GetUserAgentInternal() 
     at System.Web.Hosting.IIS7WorkerRequest.GetKnownRequestHeader(Int32 index) 
     at System.Web.HttpRequest.get_UserAgent() 
     at System.Web.HttpRequestWrapper.get_UserAgent() 
     at System.Web.WebPages.BrowserHelpers.GetOverriddenUserAgent(HttpContextBase httpContext) 
     at System.Web.WebPages.BrowserHelpers.GetOverriddenBrowser(HttpContextBase httpContext, Func`2 createBrowser) 
     at System.Web.WebPages.BrowserHelpers.GetOverriddenBrowser(HttpContextBase httpContext) 
     at System.Web.WebPages.DisplayModeProvider.<.ctor>b__2(HttpContextBase context) 
     at System.Web.WebPages.DefaultDisplayMode.CanHandleContext(HttpContextBase httpContext) 
     at System.Web.WebPages.DisplayModeProvider.<>c__DisplayClass6.<GetAvailableDisplayModesForContext>b__5(IDisplayMode mode) 
     at System.Linq.Enumerable.WhereListIterator`1.MoveNext() 
     at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
     at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
     at System.Web.Mvc.VirtualPathProviderViewEngine.GetPath(ControllerContext controllerContext, String[] locations, String[] areaLocations, String locationsPropertyName, String name, String controllerName, String cacheKeyPrefix, Boolean useCache, String[]& searchedLocations) 
     at System.Web.Mvc.VirtualPathProviderViewEngine.FindView(ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) 
     at System.Web.Mvc.ViewEngineCollection.<>c__DisplayClassc.<FindView>b__a(IViewEngine e) 
     at System.Web.Mvc.ViewEngineCollection.Find(Func`2 lookup, Boolean trackSearchedPaths) 
     at System.Web.Mvc.ViewEngineCollection.FindView(ControllerContext controllerContext, String viewName, String masterName) 
     at ActionMailer.Net.Mvc.EmailResult.LocateViews(ControllerContext context) in c:\Dev\actionmailer\src\ActionMailer.Net.Mvc\EmailResult.cs:line 127 
     at ActionMailer.Net.Mvc.EmailResult.AddMessageViews(ControllerContext context) in c:\Dev\actionmailer\src\ActionMailer.Net.Mvc\EmailResult.cs:line 155 
     at ActionMailer.Net.Mvc.EmailResult.ExecuteResult(ControllerContext context) in c:\Dev\actionmailer\src\ActionMailer.Net.Mvc\EmailResult.cs:line 98 
     at ActionMailer.Net.Mvc.MailerBase.Email(String viewName, Object model, String masterName, Boolean trimBody) in c:\Dev\actionmailer\src\ActionMailer.Net.Mvc\MailerBase.cs:line 166 
     at SocialCrm.Controllers.MailController.MoreThanXFollowersEmail(AlertEmailModel model) in c:\dev\palminfo\SocialCrm\SocialCrm\Controllers\MailController.cs:line 18 
     at SocialCrm.Controllers.CronJobController.SendAlertEmail(SearchResultModel searchResultModel, Int32 searchQueryId, List`1 alerts, String emailTo, String streamName) in c:\dev\palminfo\SocialCrm\SocialCrm\Controllers\Batch\CronJobController.cs:line 146 
     at SocialCrm.Controllers.CronJobController.<RunTwitterSearchQuery>b__3() in c:\dev\palminfo\SocialCrm\SocialCrm\Controllers\Batch\CronJobController.cs:line 83 

這是非常醜陋的,我真的很感謝在這個問題上的任何幫助。

更新:使用MvcMailer時this是我收到的錯誤。

+0

我能看到的最明顯的事情是確保'searchQueryId'是一個有效的Int32,而不是Int64,字符串等。 –

+0

@ChrisPratt是的,它是,例如我用'searchQueryId = 1'測試。我有一種感覺,這個問題主要是關於httpContext在使用這種異步方式時缺少一些字段... –

+0

Hi @Cristian Boariu,你能解決它嗎?我遇到與ActionMailer完全相同的問題。 – GurjeetSinghDB

回答

0

如果您使用的是MvcMailer,請嘗試在github上發佈的解決方案,尋找非常類似的問題。解決方案是每次發送一封電子郵件時創建一個新的UserMailer:Github Answer

+0

嘗試了這一點,它並沒有幫助。 –

相關問題