Pergunta

Eu estive tentando escrever um pouco simples Cmdlet para me permitir Definir/Obter/Remover itens do cache.O problema que eu tenho é que eu não consigo descobrir como conectar-se para o local de cluster de cache.

Eu tentei adicionar o aplicativo de costume.config coisas, mas que não parece ter pego ...

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

Eu prefiro não ter essa configuração em tudo.Então o que eu estou realmente perguntando é: o que o equivalente a código C# é para o seguinte powershell...

Use-CacheCluster

Pelo que eu pude perceber Use-CacheCluster ligue para o local de cluster se nenhum parâmetro for fornecido,

Foi útil?

Solução

Eu acabei de fazer alguns espeleologia no AppFabric código Powershell com o Refletor para ver como ele funciona nos bastidores.Se você chamar Use-CacheCluster sem parâmetros e.g.para o cluster local, o código lê a string de conexão e o provedor do nome da chave do Registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AppFabric\V1.0\Configuration.Infelizmente, em seguida, ele usa esses valores para construir uma série de classes (ClusterConfigElement, CacheAdmin e ClusterHandler) que estão todos marcados como internos, de modo que você não pode usá-los para pegar o cluster atual contexto (por falta de palavra melhor) que Powershell está a trabalhar com.

Para fazer o Cmdlet trabalho, então, eu acho que você precisa passar em um nome de host (o que seria um dos servidores no cluster, e talvez você poderia padrão esse para o nome do computador local) e um número de porta (o que você poderia padrão para 22233), e utilizar esses valores para construir um DataCacheServerEndpoint passar para o seu DataCacheFactory exemplo:

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

Outras dicas

O problema é que a chamada:DataCacheFactoryConfiguration config = new DataCacheFactoryConfiguration();

dentro Cmdlet mothods produz um erro de soar como "não é Possível inicializar DataCacheFactoryConfiguration".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top