2012-08-09 8 views
7

Verwenden von VS2012 Ich habe die Caching-Funktion von der WebRole-Eigenschaften Caching Registerkarte hinzugefügt. Unter anderem erzeugte es die folgende XML in web.config:Implementieren azurblauen Colocated-Caching

Okay, großartig. Ich habe den [Name der Clusterrolle] durch den Namen der Webrolle ersetzt, sagen wir "helloworld.web". Nun, wenn ich schaffen die DataCacheFactory oder DataCache- Objekt:

_dataCacheFactory = new DataCacheFactory(); 
    _defaultCache = _dataCacheFactory.GetDefaultCache(); 

    //Or, just this line 
    _defaultCache = new DataCache(@"default"); 

bekomme ich folgende Fehlermeldung:

Microsoft.ApplicationServer.Caching.DataCacheException was unhandled 
    HelpLink=http://go.microsoft.com/fwlink/?LinkId=164049 
    HResult=-2146233088 
    Message=ErrorCode<ERRCA0021>:SubStatus<ES0001>:Server collection cannot be empty. 
    Source=Microsoft.ApplicationServer.Caching.Client 
    ErrorCode=21 
    SubStatus=-1 

Some notes: 
IDE: VS2012, 
Framework: 4.0 
AzureSDK: June2012 
Local dev machine 

Was bin ich fehlt?

bearbeiten

Ich habe es an die Arbeit!

Ich erstellte die DataCacheFactory in WebRole OnStart-Methode, ich übertrug es zu Application_Start in Global.asax und es scheint zu funktionieren.

Sandrino erklärt, warum dies der Fall ist: https://stackoverflow.com/a/11886136/1374935

Antwort

6

In Ihrer Frage sprechen Sie über das Hinzufügen der XML zu web.config, dies funktioniert für die Webanwendung, die in Ihrer Webrolle gehostet wird

Aber Sie müssen wissen, dass der Code in der WebRole.cs in einem anderen Prozess (vor dem Starten der Webanwendung) ausgeführt wird. Deshalb kann es nicht aus Ihrer web.config lesen und das ist der Grund, warum es schien, dass kein Server konfiguriert wurde.

Damit dieser Code auch von Ihrer WebRole.cs funktioniert, müssen Sie die XML-Datei in der Konfigurationsdatei für den Prozess hinzufügen, der diesen Code ausführt. Ihr Code wird im Prozess WaIISHost.exe ausgeführt. Sie müssen daher eine neue Konfigurationsdatei erstellen WaIISHost.exe.config, fügen Sie das XML in dieser Datei hinzu und ändern Sie die Eigenschaft Copy to Output Directory für diese Datei in " Immer kopieren ".

Lesen Sie mehr über diesen Prozess WaIISHost.exe hier: New Full IIS Capabilities: Differences from Hosted Web Core

1

ich es an die Arbeit!

Ich erstellte die DataCacheFactory in WebRole OnStart-Methode, ich übertrug es zu Application_Start in Global.asax und es scheint zu funktionieren.

+0

Ich mag würde, warum zwar wissen, und wo wäre der beste Ort, um den Code zu setzen, die das Erstellen von azur Tabellen bestimmte Operationen wie initialisiert, Cache-Verbindungen zu schaffen usw. für eine ASP.NET MVC-App. – States

+0

Siehe: http://StackOverflow.com/a/11886136/1374935 – States

+1

Ich habe genau das gleiche Problem, aber initiieren den Cache von einem MVC-Controller. Ich habe in Appplication_start nichts getan. Irgendwelche Ideen, ist es ein ähnliches Problem und mir fehlt etwas im Startup? –

1

Ja. Schritt durch die verschiedenen config und ich habe die Azure Tools auch während meiner Fehlersuche neu installiert.

Es ist die Web.config, die oben erwähnt wird, aber in Ihrer Service-Definition, sicherzustellen, dass es eine Linie hat:

<Import moduleName="Caching" /> 

Dies war meine Wurzel Problem, aber dann, wenn fast alles verändert hatte versucht, zu erhalten es funktioniert. Als ich mir die Webrolle anschaute, fehlte auch die Caching-Registerkarte, die durch die Neuinstallation von Azure-Tools behoben wurde (ich habe eine Bereinigung von alten Tools vorgenommen, die vielleicht geholfen haben oder nicht). Ich initiierte es über die Azure-Site-Beispiele und nicht, was oben ist.

DataCache AgencyCache = new DataCache("AgencyDataValidation"); 

Erinnerung zu importieren:

using Microsoft.ApplicationServer.Caching; 
Verwandte Themen