開啟網站時發生異常
service unavailable http error 503. the service is unavailable
前一次開啟剛網站時還正常
Windows 10 更新以後,開啟架設在IIS上的網站(ASP.NET Core 2.0)時發生錯誤的訊息,搜尋一下得知是這個網站的 ApplicationPool 是[停用]狀態,啟用以後執行網站,還是出現同樣異常,ApplicationPool 又變成[停用]狀態,用事件檢視器查看來源為[IIS AspNetCore Module]的資訊,發現下面這則訊息
無法載入 C:\WINDOWS\System32\inetsrv\iiswsock.dll
前幾天開發時有用到 WebSocket,也能正常使用。開啟[開啟或關閉 Windows 功能],點開[Internet Infomation Services]>[World Wide Web 服務]>[應用程式開發功能]發現之前已經勾選的[WebSocket通訊協定]是未選取狀態,勾選以後問題就解決了。
2018年5月20日 星期日
2014年7月30日 星期三
取得更新失敗的詳細原因
1. 驗證不過的原因
public ActionResult Create(TopicCategory model) { if (ModelState.IsValid) { _db.TopicCategory.Add(model); _db.SaveChanges(); return Json(new { status = "success", information = model.Id }); } else { string messages = string.Join("; ", ModelState.Values .SelectMany(x => x.Errors) .Select(x => x.ErrorMessage)); return Json(new { status = "error", information = messages }); }}
2. EF SaveChanges()失敗原因
try
{
_db.SaveChanges();
}
catch (DbEntityValidationException dbEx)
{
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
}
}
}
ortry
{
// Your code...
// Could also be before try if you know the exception occurs in SaveChanges
_db.SaveChanges();
}
catch (System.Data.Entity.Validation.DbEntityValidationException e)
{
foreach (var eve in e.EntityValidationErrors)
{
Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
eve.Entry.Entity.GetType().Name, eve.Entry.State);
foreach (var ve in eve.ValidationErrors)
{
Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
ve.PropertyName, ve.ErrorMessage);
}
}
throw;
}
2014年1月28日 星期二
Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
錯誤訊息 :
可能某個不可為null的欄位, 填入了null, 但是不知道是哪個欄位, 因此使用try catch來捕抓錯誤
try { _db.SaveChanges(); } catch (DbEntityValidationException dbEx) { foreach (var validationErrors in dbEx.EntityValidationErrors) { foreach (var validationError in validationErrors.ValidationErrors) { Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage); } } }
按下F5執行 :
在偵錯模式下追蹤到的自訂錯訊息(紅字)
2014年1月26日 星期日
名稱 'Styles' 不存在於目前內容中
The Name 'Scripts' Does Not Exist in the Current Context
在MVC空白範本時, 因為沒有 Layout.cshtml , 所以就自己新增了一個, 並加入了 @Style 或是 @Script, 例如 :
@Scripts.Render("~/bundles/jqueryval")
執行時發生錯誤 :
名稱 'Styles' 不存在於目前內容中
解決方法 :
- 刪除 @Style 和 @Script 程式碼
- 用其他的範本(例如網際網路範本)
- 安裝Optimization
- Step 1 : 用 NuGet 安裝Optimization打開 [工具>程式庫套件管理員>套件管理器主控台] 執行
PM> Install-Package Microsoft.Web.Optimization -Pre內容 : http://www.nuget.org/packages/Microsoft.Web.Optimization - Step 2: 在 config 檔案裡面加入 namespace reference以下兩個Web.config都要加入 :根目錄下的 Web.config :
<configuration><system.web><pages><namespaces><add namespace="System.Web.Optimization" /></namespaces></pages></system.web></configuration>Views 資料夾下的Web.config :<configuration><system.web.webPages.razor><pages pageBaseType="System.Web.Mvc.WebViewPage"><namespaces><add namespace="System.Web.Optimization" /></namespaces></pages></system.web.webPages.razor></configuration>
現在可以正常執行了
2013年9月12日 星期四
C#的Model資料要給AngularJs使用時發生錯誤:序列化 '類型名稱' 型別的物件時偵測到循環參考。
【在Asp.Net MVC中練習使用AngularJs】
public ActionResult Index()
{
var user =
_db.UserProfile.ToList();
return View(user.ToList());
}
傳到view時因為資料要給AngularJs的$scope使用,所以要轉成json格式,因此:
var userData = new
System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model);
但是發生錯誤:
序列化 'System.Data.Entity.DynamicProxies.UserProfile_CEE82D32FCD691626A61F42769FECEA9AB07909986AD7E4D856A9F08F03065F4' 型別的物件時偵測到循環參考。
看起來在物件層級中有循環參考(某個欄位參考另一個資料表),因此要選擇要用的欄位,且非導覽欄位,完整程式如下
@model IEnumerable<HappyMovieAngularJs.Models.UserProfile>
@{
var user = Model.Select(x => new { x.UserId, x.NickName,
x.UserName });
var userData = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(user);
}
<script>
var myApp = angular.module('myApp', []);
myApp.controller('AppCtrl', function ($scope) {
$scope.users = JSON.parse('@Html.Raw(userData)');
});
</script>
<div data-ng-app="myApp">
<div data-ng-controller="AppCtrl">
<table>
<tr data-ng-repeat="user in
users">
<td>{{user.UserId}}</td>
<td>{{user.NickName}}</td>
<td>{{user.UserName}}</td>
</tr>
</table>
</div>
</div>
2013年7月14日 星期日
找不到必要的 .Net Framework Data Provider。可能尚未安裝。
建立一個新的網際網路應用程式,想要使用原本已經建立好的資料庫時,我在專案上加入了【ADO.NET 實體資料模型】(Entity Framework)並連結到要使用的資料庫
確定後在web.config產生連結字串
以上為 database-first
----------------------------------------------------------------
確定後在web.config產生連結字串
以上為 database-first
----------------------------------------------------------------
在指定的資料庫裏面有一個資料表Users,想要讓WebSecurity使用時修改了
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
為
WebSecurity.InitializeDatabaseConnection("TestDbEntities", "Users", "UserId", "UserName", autoCreateTables: true);我將預設產生的DefaultConnection改為TestDbEntities是,並將UserProfile資料表改為Users開始執行網站,當執行到上面這段修改過的程式時, 發生錯誤:找不到必要的 .Net Framework Data Provider。可能尚未安裝。
看來membership服務認不出entity framework的連結字串,因此將連結字串改回用DefaultConnection,並修改內容:<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=TestDb;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
2013年6月29日 星期六
在ASP.NET MVC4使用預設的User Roles
新增一個網際網路應用程式,打開 AccountController並看看註冊action
[HttpPost]
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// 嘗試註冊使用者
try
{
WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
WebSecurity.Login(model.UserName, model.Password);
return RedirectToAction("Index", "Home");
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}
// 如果執行到這裡,發生某項失敗,則重新顯示表單
return View(model);
}
這裡少了對新的使用者指派腳色設定,在 WebSecurity.CreateUserAndAccount() 後面加入
if (!Roles.RoleExists("user"))
{
Roles.CreateRole("user");
}
Roles.AddUserToRole(model.UserName, "user");
之後可以再Action上面加入
[Authorize(Roles = "admin")]
或是在程式或是View裡面判斷
if (Roles.IsUserInRole("admin")){}
---------------------------------------------------------
當在別的Controller裡面的Action加入[Authorize(Roles = "admin")] 會出現錯誤 :
建立連接至 SQL Server 時,發生網路相關或執行個體特定的錯誤。找不到或無法存取伺服器。確認執行個名稱是否正確,以及 SQL Server 是否設定為允許遠端連線。 (provider: SQL Network Interfaces, error: 26 - 搜尋指定的伺服器/執行個體時發生錯誤)
因為使用SimpleMembership的資料庫還未初始化,可以在Controller上加入
[InitializeSimpleMembership] 即可(預設只有AccountController有加入該屬性);
或是想要在應用程式啟動時就初始化可以在Global.asax 加入
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
如果指示發生錯誤在:
// 請確定一個應用程式啟動只起始一次 ASP.NET Simple Membership
LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
// 請確定一個應用程式啟動只起始一次 ASP.NET Simple Membership
LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
頁面顯示錯誤訊息為:
"WebSecurity.InitializeDatabaseConnection" 方法只能呼叫一次。
"WebSecurity.InitializeDatabaseConnection" 方法只能呼叫一次。
將該檔案(Filters/InitializeSimpleMembershipAttribute.cs)內的WebSecurity.InitializeDatabaseConnection()方法移除
---------------------------------------------------------
取的目前使用者的角色(陣列)
string[] roles = Roles.GetRolesForUser()
判斷角色
bool isAdmin = Roles.IsUserInRole("admin")
訂閱:
文章 (Atom)




