Pregunta

He estado intentando escribir un pequeño cmdlet simple que me permita configurar/obtener/eliminar elementos de caché.El problema que tengo es que no puedo entender cómo conectarme al clúster de caché local.

Intenté agregar las cosas habituales de app.config, pero parece que no se soluciona...

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

Preferiría no tener esa configuración en absoluto.Entonces, lo que realmente estoy preguntando es cuál es el código C# equivalente para el siguiente PowerShell...

Use-CacheCluster

De lo que puedo reunir Use-CacheCluster conectarse al clúster local si no se proporcionan parámetros

¿Fue útil?

Solución

Acabo de investigar un poco el código de AppFabric Powershell con Reflector para ver cómo funciona bajo las sábanas.si llamas Use-CacheCluster sin parámetros, p.para el clúster local, el código lee la cadena de conexión y el nombre del proveedor de la clave de Registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AppFabric\V1.0\Configuration.Desafortunadamente, luego usa esos valores para construir una serie de clases (ClusterConfigElement, CacheAdmin y ClusterHandler) que están marcados como internos, por lo que no puede usarlos para seleccionar el contexto actual del clúster (a falta de una palabra mejor) con el que está trabajando Powershell.

Entonces, para que su cmdlet funcione, creo que necesita pasar un nombre de host (que sería uno de los servidores en su clúster, y tal vez podría usar de manera predeterminada el nombre de la máquina local) y un número de puerto (que podría usar de manera predeterminada). a 22233), y utilizar esos valores para construir un DataCacheServerEndpoint pasar a tu DataCacheFactory p.ej.

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

Otros consejos

El problema es que la llamada: DataCacheFactoryConfiguration Config= New DatacacheFactoryConfiguration ();

Dentro del cmdlet Mothods produce un error que suena como "No se puede inicializar DataCacheFactoryConfiguración".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top