Командлет AppFabric — невозможно подключиться к локальному кластеру

StackOverflow https://stackoverflow.com//questions/11666760

  •  12-12-2019
  •  | 
  •  

Вопрос

Я пытался написать простой небольшой командлет, позволяющий устанавливать/получать/удалять элементы кэша.Проблема в том, что я не могу понять, как подключиться к кластеру локального кэша.

Я пробовал добавить обычный материал app.config, но, похоже, он не подхватился...

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

Я бы предпочел вообще не иметь такой конфигурации.Итак, что я действительно спрашиваю, так это то, что представляет собой эквивалентный код C# для следующей оболочки PowerShell...

Use-CacheCluster

Из того, что я могу собрать Use-CacheCluster подключиться к локальному кластеру, если параметры не указаны

Это было полезно?

Решение

Я только что немного изучил код AppFabric Powershell с помощью Reflector, чтобы увидеть, как он работает под обложкой.Если вы позвоните Use-CacheCluster без параметров, например.для локального кластера код считывает строку подключения и имя провайдера из раздела реестра. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AppFabric\V1.0\Configuration.К сожалению, затем он использует эти значения для создания серии классов (ClusterConfigElement, CacheAdmin и ClusterHandler), которые помечены как внутренние, поэтому вы не можете использовать их для определения текущего контекста кластера (за неимением лучшего слова), с которым работает Powershell.

Я думаю, чтобы ваш командлет работал, вам нужно передать имя хоста (которое будет одним из серверов в вашем кластере, и, возможно, вы могли бы по умолчанию использовать имя локального компьютера) и номер порта (который вы могли бы использовать по умолчанию). до 22233) и используйте эти значения для построения DataCacheServerEndpoint перейти к вашему DataCacheFactory например

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

Другие советы

Проблема в том, что вызов: Datacachefactoryconfiguration config= новая datacachefactoryconciguration ();

Внутренние командлет Mothods создает ошибку, такую как «не может инициализировать datacachefactoryConfiguration».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top