Как получить уникальный идентификатор клиента в Citrix XenApp 6.0? (MFCom от 4.0 и 4.5 не работает)

В настоящее время для Presentation Server 4.0 и 4.5 я получаю уникальный идентификатор клиента через MFCom в C# .NET.

MetaFrameFarm farm = new MetaFrameFarm();
farm.Initialize(MetaFrameObjectType.MetaFrameWinFarmObject);

foreach (MetaFrameSession session in farm.Sessions)
{
    clientId = session.ClientID;
.....

Я начал получать тестирование ошибок на 6.0. Строка, о которой идет речь, является неудачной - это первая строка для создания объекта 'ферма' выше.

Посмотрев онлайн я нашел это...

Начиная с XenApp 6.0, MFCOM как общедоступный интерфейс программирования и создания сценариев больше не будет доступен. Весь существующий код на основе MFCOM больше не работает в XenApp 6.0. Нет сомнений в том, что отсутствие MFCOM потребует дополнительных усилий для принятия XenApp 6.0.

Есть ли способ получить уникальный идентификатор клиента в 6.0?

2 ответа

Это довольно старый, но я продолжал сталкиваться с этим, когда я хотел получить clientID.

Имейте в виду, что идентификаторы клиентов из 4.X не совпадают с форматом 6.X. Это касается примерно всех идентификаторов, приложения и сервера:

Runspace rs = RunspaceFactory.CreateRunspace();
rs.Open();

PowerShell ps = PowerShell.Create();
ps.Runspace = rs;

PSSnapInException ex;
rs.RunspaceConfiguration.AddPSSnapIn("Citrix.XenApp.Commands", out ex);

ps.AddCommand("GET-XASession").AddParameter("Full");

foreach (PSObject Session in ps.Invoke())
{
   try
   {
      ClientID = Convert.ToString(Session.Properties["ClientId"].Value);

      Console.WrileLine(ClientID);

   }

   catch (Exception e)
   {
      WriteError.WriteEntry("Client Failure " + e.Message + EventLogEntryType.FailureAudit);
   }
}

Как вы правильно установили, MFCOM недоступен в XenApp 6. Итак, у вас есть два способа получить уникальный ClientID:

  1. Используйте подсистему Citrix WMI. Из вашего приложения подключитесь к пространству имен Root\Citrix WMI и перечислите экземпляры класса MetaFrame_Session. Вы можете выполнить фильтрацию по имени сервера (так как перечисление вернет все сеансы на всех серверах фермы, а не только на том, на котором запущено приложение) и по идентификатору сеанса. Экземпляры класса Metaframe_session содержат несколько свойств, которые являются ссылками на экземпляры других классов; свойство Client ссылается на Metaframe_ICA_Client, а свойство SessionUser ссылается на Citrix_User. Metaframe_ICA_Client дает вам IP-адрес клиента, имя хоста и некоторые другие вещи, которые вы можете объединить в качестве идентификатора.
    Однако в настоящее время XenApp 6 имеет серьезную ошибку с подсистемой WMI Citrix, и попытка перечислить и создать экземпляры классов, на которые я ссылаюсь выше (как обычный пользователь - администраторы в порядке), приводит к сбою не менее пятнадцати отдельных системных служб... Так что, возможно, нет.
  2. Альтернативой (и техникой, которую я использовал) было использование Citrix WFAPI SDK. Это неуправляемый код и немного свирепый, но здесь есть довольно хорошая статья об использовании WFAPI для получения сведений о клиенте.
Другие вопросы по тегам