2014年12月12日 星期五

不要在 ASP.NET MVC 5 中,在 ActionFilterAttribute 上使用 Task.Factory.StartNew

今天在調整校能的時候,想到可以使用非同步的方式來增加網站的校能。

就拿 Log 來試試身手好了。

MVC 5 的ActionFilterAttribute 尚不支援非同步

真的是這樣,見 ActionFilterAttribute, 果然沒有像 WebAPI 上的 ActionFilterAttributeOnActionExecutedAsync 方法。

怎麼辦呢?

異相天開地找了一段如下的程式 (https://aspnetwebstack.codeplex.com/discussions/478983),既然被標為解答,大概就可以運作了吧!

Task.Factory.StartNew(() => Logger.WriteLogAsync(log),
				TaskCreationOptions.LongRunning);

想法是:自己使用多執行緒的方式寫 log.

結果還不錯,而且單頁測試時,效能還快了將近10%呢?

上線前效能測試

想說單頁沒問題,應該就沒問題了呢?於是就送出去測試來。

這個效能測試是正式的首頁,測個10分鐘,效能變差也就算了,竟然還會出現 502 Bad GetWays?然後網站就掛了。

結論

ASP.NET MVC 5 的ActionFilterAttribute 不支援 async/await,看來是有道理的。

印象中,ASP.NET 有這個規定:不要在頁面中自己產生新的執行緒。我不信邪,就只能撞撞牆,練練經驗了。

不要自己找麻煩。

2014年12月9日 星期二

發行程式到 Azure Web Site 失敗

一直以來,對 Azure Web Site 深懷無比的信心,因為它部署程式非常的快,無比的方便。因此,只要能力所及,就會推銷此方法來實作網站。

沒想到,上個星期部署網站失敗了。錯誤畫面如下。

image

試了幾下,將網站重起後,就可以繼續部署了。真是奇怪!

image

今天,同事又回報相同的狀況發生,而且,上面的招數沒用了。

於是,更進階的招數來囉!將網站刪除,然後重建,心想我都重建了,應該會有效果吧!

天不從人願!就跟薪水一樣不聽使喚。

找微軟吧!沒有技術支援點數,不鳥我!給了我 forum 自行發問吧。

解決方法

微軟的論譠真的是有用的。於是找到了這一篇

http://azure.microsoft.com/blog/2014/06/30/web-deploy-as-a-site-extension/

原來,網站有新的部署方法,使用了 {yourwebsite}.scm.azurewebsites.net 來部署。就使用舊的部署端點來發行程式吧!

在Azure Portal 上,將該網站加上一個設定 WEBSITE_WEBDEPLOY_USE_SCM = false 後,記得按儲存

image

接下來下載發行設定檔,再使用這個發行設定檔,在Visual Studio  中發行!

萬歲!

(??) 我發現只有這個訂閱所建立的網站會這樣,即使建立新的網站也無法發行。但其他的訂閱就可以?到目前仍不明所以。

Share with Facebook