Question

J'ai essayé d'écrire une simple petite applet de commande pour me permettre de définir/obtenir/supprimer des éléments de cache.Le problème que j'ai est que je n'arrive pas à comprendre comment me connecter au cluster de cache local.

J'ai essayé d'ajouter les éléments app.config habituels, mais cela ne semble pas être récupéré...

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

Je préfère ne pas avoir cette configuration du tout.Donc, ce que je demande vraiment, c'est quel est le code C# équivalent pour le PowerShell suivant...

Use-CacheCluster

D'après ce que je peux comprendre Use-CacheCluster se connecter au cluster local si aucun paramètre n'est fourni

Était-ce utile?

La solution

Je viens de faire de la spéléologie dans le code AppFabric Powershell avec Reflector pour voir comment cela fonctionne sous les couvertures.Si tu appelles Use-CacheCluster sans paramètres, par ex.pour le cluster local, le code lit la chaîne de connexion et le nom du fournisseur à partir de la clé de registre HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AppFabric\V1.0\Configuration.Malheureusement, il utilise ensuite ces valeurs pour construire une série de classes (ClusterConfigElement, CacheAdmin et ClusterHandler) qui sont tous marqués comme internes, vous ne pouvez donc pas les utiliser pour récupérer le contexte de cluster actuel (faute d'un meilleur mot) avec lequel Powershell travaille.

Pour que votre applet de commande fonctionne, je pense que vous devez transmettre un nom d'hôte (qui serait l'un des serveurs de votre cluster, et peut-être pourriez-vous utiliser par défaut le nom de la machine locale) et un numéro de port (que vous pourriez utiliser par défaut). à 22233), et utilisez ces valeurs pour créer un DataCacheServerEndpoint transmettre à votre DataCacheFactory par exemple.

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

Autres conseils

Le problème est que l'appel :DataCacheFactoryConfiguration config = new DataCacheFactoryConfiguration();

à l'intérieur des mothods de l'applet de commande produit une erreur ressemblant à "Impossible d'initialiser DataCacheFactoryConfiguration".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top