سؤال

لقد كنت أحاول كتابة أمر Cmdlet صغير بسيط للسماح لي بتعيين/الحصول على/إزالة عناصر ذاكرة التخزين المؤقت.المشكلة التي أواجهها هي أنني لا أستطيع معرفة كيفية الاتصال بمجموعة ذاكرة التخزين المؤقت المحلية.

لقد حاولت إضافة عناصر 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.

لكي يعمل أمر Cmdlet الخاص بك، أعتقد أنك بحاجة إلى تمرير اسم مضيف (والذي سيكون أحد الخوادم في مجموعتك، وربما يمكنك تعيين هذا افتراضيًا على اسم الجهاز المحلي) ورقم المنفذ (الذي يمكنك تعيينه افتراضيًا إلى 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 = new DataCacheFactoryConfiguration();

داخل mothods Cmdlet ينتج خطأ يبدو مثل "لا يمكن تهيئة DataCacheFactoryConfiguration".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top