2016-05-28 4 views
0

У меня есть код, который получает виртуальные сетевые подключения и извлекает информацию о подключенном коммутаторе.VMWare SDK C# VirtualMachine Тип интерфейса

Код, который, как мне кажется, работает для интерфейсов типа «VirtualEthernetCardNetworkBackingInfo», но это не удается, когда сервер подключен к коммутатору VD, поскольку в этом сценарии необходимо использовать тип «VirtualEthernetCardDistributedVirtualPortBackingInfo».

Вопрос в том, как вы обнаруживаете тип интерфейса перед тем, как попытаться наложить объект? Или нужно просто попробовать бросить и посмотреть, какой из них работает?

Это код, который я имею, но я искал что-то более чистое ...

bool vswitch = false, vds = false; 

VirtualEthernetCard _workloadnic = (VirtualEthernetCard)_virtualdevice; 
//first check if the VM is connected to a vswitch 
try 
{ 
    VirtualEthernetCardNetworkBackingInfo _nic_backing = (VirtualEthernetCardNetworkBackingInfo)_workloadnic.Backing; 
    network_moid = _nic_backing.Network.Value; 
    vswitch = true; 
} 
catch (Exception ex) { } 

//if it was not a vswitch it should be a vds 
if (!vswitch) 
{ 
    try 
    { 
     VirtualEthernetCardDistributedVirtualPortBackingInfo _nic_backing = (VirtualEthernetCardDistributedVirtualPortBackingInfo)_workloadnic.Backing; 
     network_moid = _nic_backing.Port.SwitchUuid 
     vds = true; 
    } 
    catch (Exception ex) { } 
} 
if (!vswitch || !vds) 
{ 
    Logger.log(String.Format("UpdateVMwareWorkload: Could not determine workload network backing type"), Logger.Severity.Error); 
} 

ответ

0

Это думает, что это будет работать нормально ...

  if (_workloadnic.Backing is VirtualEthernetCardNetworkBackingInfo) 
      { 

      } 
      else if (_workloadnic.Backing is VirtualEthernetCardDistributedVirtualPortBackingInfo) 
      { 

      }