Frage

Ich habe versucht, ein einfaches kleines Cmdlet zu schreiben, mit dem ich Cache-Elemente festlegen / abrufen / entfernen kann.Das Problem, das ich habe, ist, dass ich nicht herausfinden kann, wie ich eine Verbindung zum lokalen Cache-Cluster herstellen soll.

Ich habe versucht, die übliche App hinzuzufügen.konfigurationsmaterial, aber das scheint nicht aufgegriffen zu werden...

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="dataCacheClient" type="Microsoft.ApplicationServer.Caching.DataCacheClientSection, Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" allowLocation="true" allowDefinition="Everywhere" />
  </configSections>
  <dataCacheClient>
    <hosts>
      <host name="localhost" cachePort="22233" />
    </hosts>
  </dataCacheClient>
</configuration>

Ich hätte diese Konfiguration lieber überhaupt nicht.Was ich also wirklich frage, ist, was der entsprechende C # -Code für die folgende Powershell ist...

Use-CacheCluster

Von dem, was ich sammeln kann Use-CacheCluster stellen Sie eine Verbindung zum lokalen Cluster her, wenn keine Parameter angegeben sind

War es hilfreich?

Lösung

Ich habe gerade einige Spelunking in den AppFabric Powershell-Code mit Reflektor gemacht, um zu sehen, wie es unter der Decke funktioniert.Wenn du anrufst Use-CacheCluster ohne Parameter, z.für den lokalen Cluster liest der Code die Verbindungszeichenfolge und den Anbieternamen aus dem Registrierungsschlüssel HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AppFabric\V1.0\Configuration.Leider werden diese Werte dann verwendet, um eine Reihe von Klassen zu erstellen (ClusterConfigElement, CacheAdmin und ClusterHandler), die alle als intern markiert sind, sodass Sie sie nicht zum Abrufen des aktuellen Clusterkontexts verwenden können (mangels eines besseren Wortes), mit dem Powershell arbeitet.

Damit Ihr Cmdlet funktioniert, müssen Sie meiner Meinung nach einen Hostnamen (der einer der Server in Ihrem Cluster wäre und möglicherweise standardmäßig den Namen des lokalen Computers verwendet) und eine Portnummer (die Sie standardmäßig verwenden könnten) eingeben 22233), und verwenden Sie diese Werte, um eine zu erstellen DataCacheServerEndpoint um an Ihre weiterzugeben DataCacheFactory beispielsweise.

[Cmdlet(VerbsCommon.Set,"Value")]
public class SetValueCommand : Cmdlet
{
    [Parameter]
    public string Hostname { get; set; }
    [Parameter]
    public int PortNumber { get; set; }
    [Parameter(Mandatory = true)]
    public string CacheName { get; set; }

    protected override void ProcessRecord()
    {
        base.ProcessRecord();

        // Read the incoming parameters and default to the local machine and port 22233
        string host = string.IsNullOrWhiteSpace(Hostname) ? Environment.MachineName : Hostname;
        int port = PortNumber == 0 ? 22233 : PortNumber;

        // Create an endpoint based on the parameters
        DataCacheServerEndpoint endpoint = new DataCacheServerEndpoint(host, port);

        // Create a config using the endpoint
        DataCacheFactoryConfiguration config = new DataCacheFactoryConfiguration();
        config.Servers = new List<DataCacheServerEndpoint> { endpoint };

        // Create a factory using the config
        DataCacheFactory factory = new DataCacheFactory(config);

        // Get a reference to the cache so we can now start doing useful work...
        DataCache cache = factory.GetCache(CacheName);
        ...
    }
}

Andere Tipps

Das Problem ist, dass der Anruf: DataCacheFactoryConfiguration Config= Neue DataCacheFactoryConfiguration ();

Innere Cmdlet-Mothods erzeugt ein Fehler, der wie die DataCacheFactoryConfiguration nicht initialisiert klingt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top