VMWare SDK C# 虚拟机接口类型
VMWare SDK C# VirtualMachine Interface Type
我有获取虚拟机网络连接和检索连接的交换机信息的代码。
我的代码似乎适用于 "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);
}
它认为这会工作得很好...
if (_workloadnic.Backing is VirtualEthernetCardNetworkBackingInfo)
{
}
else if (_workloadnic.Backing is VirtualEthernetCardDistributedVirtualPortBackingInfo)
{
}
我有获取虚拟机网络连接和检索连接的交换机信息的代码。
我的代码似乎适用于 "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);
}
它认为这会工作得很好...
if (_workloadnic.Backing is VirtualEthernetCardNetworkBackingInfo)
{
}
else if (_workloadnic.Backing is VirtualEthernetCardDistributedVirtualPortBackingInfo)
{
}