2012-09-13 16 views
7

Quando si tenta di accedere /account/manage sul server di produzione ottengo questo errore:metodo MVC 4 SimpleMembership HasLocalAccount non trovato

System.MissingMethodException: Method not found: 'Boolean WebMatrix.WebData.ExtendedMembershipProvider.HasLocalAccount(Int32)'. 
    at Microsoft.Web.WebPages.OAuth.OAuthWebSecurity.HasLocalAccount(Int32 userId) 
    at PROJECT.Controllers.AccountController.Manage(Nullable`1 message) 
    at lambda_method(Closure , ControllerBase , Object[]) 
    at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) 
    at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
    at Castle.Proxies.AsyncControllerActionInvokerProxy.InvokeActionMethod_callback(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at Castle.Proxies.Invocations.ControllerActionInvoker_InvokeActionMethod.InvokeMethodOnTarget() 
    at Castle.DynamicProxy.AbstractInvocation.Proceed() 
    at Glimpse.Mvc3.Interceptor.InvokeActionMethodInterceptor.Intercept(IInvocation invocation) 
    at Castle.DynamicProxy.AbstractInvocation.Proceed() 
    at Castle.Proxies.AsyncControllerActionInvokerProxy.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) 
    at System.Web.Mvc.Controller.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) 
    at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) 
    at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__4(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.MvcHandler.<>c__DisplayClasse.<EndProcessRequest>b__d() 
    at System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) 
    at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) 
    at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) 
    at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

Funziona benissimo dal localhost. Una ricerca su google non ha rivelato nulla.

Si noti inoltre che sto cercando di ottenere che questo maledetto provider di appartenenze "semplici" funzioni su un server sql invece di lasciarlo creare un database.

p.s. Sono su hosting condiviso.

Modifica Aggiunto lo stack completo

+0

Eventuali correzioni per questo? – CR41G14

+0

Lo stesso problema qui. Non sono su hosting condiviso - server Win2008 interno. – simon831

risposta

5

L'unica cosa che questa funzione sta facendo sta interrogando webpages_Membership tavolo. Il mio lavoro è duplicare la funzione. Se avrò una risposta reale aggiornerò

internal static bool HasLocalAccount(int userId) 
     { 
      using (YOUREntities db = new YOUREntities()) 
      { 
       webpages_Membership wm = db.webpages_Membership.Where(x => x.UserId == userId).FirstOrDefault(); 

       if (wm != null) return true; 
       return false; 
      } 

     } 
+0

Qualcuno ha risolto questo? Ho lo stesso problema – CR41G14

+0

Non l'ho mai fatto funzionare senza creare la mia funzione. – Eonasdan

+0

Grazie - ha funzionato anche per me. Non riesco a capire quale sia il problema. – rwalter

0

La funzione originale inviata da Eonasdan non funzionava per me. Ho dovuto twittarlo un po 'per farlo funzionare. Se aiuta qualcuno, eccolo:

@functions{ 
internal static bool HasLocalAccount(int userId){ 
    using (var db = Database.Open("your_database_name")) { 
     dynamic id = db.QueryValue(@"SELECT UserId FROM webpages_Membership WHERE [email protected]", userId); 
     return id != null; // returns true if id is not null 
    } 
} 
} 
0

Ho avuto anche questo problema. Nel mio caso è stato perché non avevo i binari MVC 4 installati sul mio server.

Il seguente domanda SO ha le istruzioni per installarlo:

quindi ripetere il tuo account/gestire collegamento - dovrebbe funzionare.

NB Ricordarsi di annullare l'hasLocalAccount() (se è stata implementata la soluzione alternativa contenuta in altre risposte qui).

Problemi correlati