3

Azure でホストされているオーチャード Web サイトが SQL Azure データベースに接続されています。指定された識別子が存在する行がありません [Orchard.Roles.Models.PermissionRecord#33] ここにスタック トレースがあります。

[ObjectNotFoundException: No row with the given identifier exists[Orchard.Roles.Models.PermissionRecord#33]]
NHibernate.Impl.DefaultEntityNotFoundDelegate.HandleEntityNotFound(String entityName, Object id) +56
NHibernate.Proxy.AbstractLazyInitializer.CheckTargetState() +48
NHibernate.Proxy.AbstractLazyInitializer.Initialize() +87
NHibernate.Proxy.DefaultLazyInitializer.Intercept(InvocationInfo info) +85
PermissionRecordProxy.get_Name() +192
Orchard.Roles.Services.RoleService.GetPermissionsForRole(Int32 id) +128
Orchard.Roles.Services.RoleService.GetPermissionsForRoleByNameInner(String name) +37
Orchard.Roles.Services.<>c__DisplayClasse.<GetPermissionsForRoleByName>b__d(AcquireContext`1 ctx) +26
Orchard.Caching.Cache`2.CreateEntry(TKey k, Func`2 acquire) in c:\Users\sebros\My Projects\Orchard\src\Orchard\Caching\Cache.cs:57
Orchard.Caching.<>c__DisplayClass2.<Get>b__0(TKey k) in c:\Users\sebros\My Projects\Orchard\src\Orchard\Caching\Cache.cs:19
System.Collections.Concurrent.ConcurrentDictionary`2.AddOrUpdate(TKey key, Func`2 addValueFactory, Func`3 updateValueFactory) +125
Orchard.Caching.Cache`2.Get(TKey key, Func`2 acquire) in c:\Users\sebros\My Projects\Orchard\src\Orchard\Caching\Cache.cs:17
Orchard.Caching.DefaultCacheManager.Get(TKey key, Func`2 acquire) in c:\Users\sebros\My Projects\Orchard\src\Orchard\Caching\DefaultCacheManager.cs:33
Orchard.Roles.Services.RoleService.GetPermissionsForRoleByName(String name) +100
Orchard.Roles.Services.RolesBasedAuthorizationService.TryCheckAccess(Permission permission, IUser user, IContent content) +595
Orchard.Security.Authorizer.Authorize(Permission permission, IContent content, LocalizedString message) in c:\Users\sebros\My Projects\Orchard\src\Orchard\Security\Authorizer.cs:72
Orchard.Security.Authorizer.Authorize(Permission permission) in c:\Users\sebros\My Projects\Orchard\src\Orchard\Security\Authorizer.cs:60
Orchard.Security.SecurityFilter.OnAuthorization(AuthorizationContext filterContext) in c:\Users\sebros\My Projects\Orchard\src\Orchard\Security\SecurityFilter.cs:24
System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor) +97
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +311
System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__19() +23
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +19
System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +10
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +55
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +39
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +55
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +29
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +25
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +55
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +31
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
Orchard.Mvc.Routes.HttpAsyncHandler.EndProcessRequest(IAsyncResult result) in c:\Users\sebros\My Projects\Orchard\src\Orchard\Mvc\Routes\ShellRoute.cs:162
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9629708
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

データベースの PermissionRecord テーブルを調べましたが、データベースに ID #33 はまったくありません。オーチャード Web サイトを webmatrix にダウンロードしてローカル開発を行うと、Web サイトでエラーがまったく発生せず、正常に動作し、SQL Azure データベースにも正しく接続されています。したがって、ローカルで動作し、Azure Web サイトから直接ファイルをダウンロードしたため、Azure Web サイトと同じファイルを使用する必要があるため、これが Azure で動作しない理由について少し混乱しています。誰にもアイデアはありますか?

4

1 に答える 1

3

これはかなり遅れていますが、今朝、orchard 1.6 で同様の状況に遭遇しました。しかし、それがどのように発生したかはわかりません!これが同じ問題に遭遇した他の誰かに役立つことを願っています.

(私はモジュールのパーミッションを何年も前に有効にした後に変更したと思いますが、壊れたロールをユーザーに割り当てるまで問題に気付かなかったと思います)

問題のあるレコードを見つけるために、この少しの SQL を使用しました。

SELECT        TOP (1000) MyPrefix_Orchard_Roles_RolesPermissionsRecord.Id, MyPrefix_Orchard_Roles_RolesPermissionsRecord.Role_id, 
                     MyPrefix_Orchard_Roles_RolesPermissionsRecord.Permission_id, MyPrefix_Orchard_Roles_RolesPermissionsRecord.RoleRecord_Id, 
                     MyPrefix_Orchard_Roles_RoleRecord.Name AS RoleName, MyPrefix_Orchard_Roles_PermissionRecord.Name AS PermissionName, 
                     MyPrefix_Orchard_Roles_PermissionRecord.FeatureName AS PermissionFeatureName, 
                     MyPrefix_Orchard_Roles_PermissionRecord.Description AS PermissionDescription
FROM            MyPrefix_Orchard_Roles_RolesPermissionsRecord LEFT OUTER JOIN
                         MyPrefix_Orchard_Roles_PermissionRecord ON 
                         MyPrefix_Orchard_Roles_RolesPermissionsRecord.Permission_id = MyPrefix_Orchard_Roles_PermissionRecord.Id LEFT OUTER JOIN
                         MyPrefix_Orchard_Roles_RoleRecord ON MyPrefix_Orchard_Roles_RolesPermissionsRecord.Role_id = MyPrefix_Orchard_Roles_RoleRecord.Id
WHERE        (MyPrefix_Orchard_Roles_RolesPermissionsRecord.Role_id = 1) -- broken administrator role

Permission レコードが欠落している 2 つのレコードがあることがわかりました。1 つは RoleRecord_Id が NULL に設定され、もう 1 つは 1 に設定された管理者です。そのため、パーミッションが admin で読み込まれると、パーミッション レコードの検索に失敗します。これは、ロギングの一部に役立ちました。

admin のいくつかのロール セクションがまだ壊れているように見えた: "Admin/Roles" そのため、上記の SQL スクリプトを実行して、さまざまなロールから問題のある行をさらに見つけました。

ランダムな行が問題を引き起こすことはなく、他のすべてが再び期待どおりに機能すると思われます。

ありがとう、マット

于 2013-03-15T12:07:18.663 に答える