2013-05-15 14 views
6

Próbuję użyć buforowania Windows Azure do przechowywania sesji w aplikacji MVC4. Buduję aplikację wykonując następujące kroki od Link, ale kiedy próbuję wykonać obiekt DataCache za pomocą poniższej linii kodu.Inicjator typów dla "Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment" rzucił wyjątek

DataCache cache = new DataCache("default"); 

Błędy następuje:

nie Microsoft.WindowsAzure.ServiceRuntime.dll znaleziony lub wersja niedopasowane, zaktualizowałem moją wersję Windows Azure Emulator 2.0.0 i zainstalować WindowsAzure.Caching pakiet w wersji 2.0 .0.0 przy użyciu instalatora pakietów NuGet . Teraz błąd zmienia się na "Inicjator typów dla " Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment "rzucił wyjątek ."

Używam Windows 8 with VS2012 and Windows Azure Emulator version 2.0.0.

będę wdzięczny, jeśli ktoś może mi pomóc w tej sprawie.

InnerException 
    Message: The type initializer for 'Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment' threw an exception. 

    Source: Microsoft.WindowsAzure.ServiceRuntime 

    Stack Trace: at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.get_IsAvailable() 
     at Microsoft.ApplicationServer.Caching.AzureClientHelper.RoleUtility.IsAzureEnvironmentAvailable() 

Stack Trace: at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) 
    at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
    at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) 
    at Microsoft.ApplicationServer.Caching.DataCacheFactoryConfiguration.Initialize(String clientName) 
    at Microsoft.ApplicationServer.Caching.DataCacheFactoryConfiguration..ctor() 
    at Microsoft.ApplicationServer.Caching.DataCacheFactory..ctor() 
    at Microsoft.ApplicationServer.Caching.DataCacheFactory.InitializeOrFetchSingletonFactoryInstance(String clientConfigurationName) 
    at Microsoft.ApplicationServer.Caching.DataCache..ctor(String cacheName, String clientConfigurationName) 
    at Microsoft.ApplicationServer.Caching.DataCache..ctor(String cacheName) 
    at MvcWebRole.Controllers.HomeController.Index() in d:\Pankaj\Azure.Test\Caching.Sample\MvcWebRole\Controllers\HomeController.cs:line 15 
    at lambda_method(Closure , ControllerBase , Object[]) 
    at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) 
+1

proszę pisać na * pełne * wyjątek, w tym InnerException. –

+0

Wyjątek: Wyjątek został zgłoszony przez cel wywołania. Wyjątek wewnętrzny: {"Inicjator typów dla" Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment "zgłosił wyjątek."} – user2384784

+0

Czy naprawdę * nie * więcej informacji niż to? Brak śledzenia stosu? –

Odpowiedz

1

Miałem ten sam problem. Rozwiązaniem było wskazanie wszystkich odwołanych zestawów Azure w każdym projekcie na to samo źródło (dla mnie biblioteki dll w folderze SDK). NuGetManager kopiuje biblioteki dll do głównej ścieżki projektu pod numerem packages i wskazuje odniesienia do tych bibliotek dll.

1

mam rozwiązać podobny problem, dodając do tego app.config:

<startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
</startup> 

To dlatego, jak sądzę, ServiceRuntime.dll (lub jeden z jego zależnościami) jest "mixed-mode" montaż. Nieco więcej informacji o tym, co to znaczy, a linie konfiguracyjne powyżej, można znaleźć tutaj: What does 'useLegacyV2RuntimeActivationPolicy' do in the .NET 4 config?

2

Doświadczyłem tego podczas migracji od Azure SDK 2.3 do 2.4 SDK.

zauważyłem migracja automatycznie ustawiana wszystkie odniesienia do wykonywania usług dla moich internetowych i robotnic ról, tj

C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\v2.3\ref\Microsoft.WindowsAzure.ServiceRuntime.dll 

zmienione na:

C:\Program Files\Microsoft SDKs\Azure\.NET SDK\v2.4\ref\Microsoft.WindowsAzure.ServiceRuntime.dll 

jednak jakichkolwiek zgromadzeń przywoływanych z web/pracownika role, które odwoływały się do tego zestawu, nie zostały zaktualizowane, więc musiałem zrobić to ręcznie.

Dodatkowo musiałem zaktualizować web.config i app.config wpisy odwołać 2.4.0.0

<dependentAssembly> 
    <assemblyIdentity name="Microsoft.WindowsAzure.ServiceRuntime" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-2.4.0.0" newVersion="2.4.0.0" /> 
</dependentAssembly> 
+0

Nie migrowałem, ale dostałem ten problem z wersją 2.3 Verison w lazurowej chmurze. na lokalnym emulatorze maszyny działa dobrze. – AKS

Powiązane problemy