Domanda

Ho cercato di scrivere un piccolo cmdlet semplice per consentirmi di impostare / ottenere / rimuovere gli elementi della cache.Il problema che ho è che non riesco a capire come connettersi al cluster cache locale.

Ho provato ad aggiungere nella solita app.Config roba, ma non sembra essere prelevato ...

<?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>
.

Preferirei non avere affatto quella configurazione.Quindi quello che sto davvero chiedendo è ciò che il codice C # equivalente è per il seguente PowerShell ...

Use-CacheCluster
.

Da ciò che posso raccogliere Use-CacheCluster connettersi al cluster locale se non vengono forniti parametri

È stato utile?

Soluzione

Ho appena fatto uno spelunking nel codice AppFabric PowerShell con riflettore per vedere come funziona sotto le coperte.Se chiami Use-CacheCluster senza parametri ad es.Per il cluster locale, il codice legge la stringa di connessione e il nome del provider dalla chiave di registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AppFabric\V1.0\Configuration.Sfortunatamente, quindi utilizza tali valori per costruire una serie di classi (ClusterConfigElement, CacheAdmin e ClusterHandler) che sono tutte contrassegnate come interne, quindi non è possibile utilizzarle per raccogliere il contesto del cluster corrente (per mancanza di una parola migliore) chePowerShell sta lavorando.

Per far funzionare il tuo cmdlet, quindi, penso che tu sia necessario passare in un nome host (che sarebbe uno dei server nel cluster, e forse potresti predefinito questo al nome della macchina locale) e un numero di porta (cheÈ possibile impostare predefinita a 22233) e utilizzare tali valori per creare un DataCacheServerEndpoint da passare al DataCacheFactory, ad esempio

[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);
        ...
    }
}
.

Altri suggerimenti

Il problema è che la chiamata: Datacachefactoryconfiguration config= nuovo datacachefactoryconfiguration ();

All'interno dei mothods cmdlet produce un errore di errore come "Impossibile inizializzare DatacaCheFactoryConfiguration".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top