Я была поставлена задача выяснить, что вызывает проблемы с этим битом кода:Virtual Server IIS WMI Проблема
public static ArrayList GetEthernetMacAddresses()
{
ArrayList addresses = new ArrayList();
ManagementClass mc = new ManagementClass("Win32_NetworkAdapter");
// This causes GetInstances(options)
// to return all subclasses of Win32_NetworkAdapter
EnumerationOptions options = new EnumerationOptions();
options.EnumerateDeep = true;
foreach (ManagementObject mo in mc.GetInstances(options)) {
string macAddr = mo["MACAddress"] as string;
string adapterType = mo["AdapterType"] as string;
if (!StringUtil.IsBlank(macAddr) && !StringUtil.IsBlank(adapterType))
{
if (adapterType.StartsWith("Ethernet")) {
addresses.Add(macAddr);
}
}
}
return addresses;
}
На нашем (Win2003) виртуальных серверов, это работает, когда выполняются как часть консоли но не из веб-службы, работающей в IIS (на том же компьютере).
В качестве альтернативы, можно использовать этот код в веб-службы на IIS (на виртуальном сервере) и получить правильные значения возврата:
public static string GetMacAddresses()
{
ManagementClass mgmt = new ManagementClass(
"Win32_NetworkAdapterConfiguration"
);
ManagementObjectCollection objCol = mgmt.GetInstances();
foreach (ManagementObject obj in objCol)
{
if ((bool)obj["IPEnabled"])
{
if (sb.Length > 0)
{
sb.Append(";");
}
sb.Append(obj["MacAddress"].ToString());
}
obj.Dispose();
}
}
Почему второй одна работа, а не первый один?
Почему только при вызове через веб-службу IIS на виртуальной машине?
Любая помощь будет оценена по достоинству.
UPDATE: После долгого времени по телефону со всеми различными уровнями MS поддержки, the've пришел к выводу, что это «как задумано».
Поскольку драйвер находится на уровне драйвера для драйвера виртуального сетевого адаптера, ответ был сделан на то, что мы должны изменить наш код «для решения проблемы».
Это означает, что вы можете не надежный тест код на виртуальных серверах, если вы с тем же кодом, который вы используете на физических серверах, так как мы не можем гарантировать, что серверы являются точными копиями ...
Какая ошибка является результатом первого? – Tomalak
Нет ошибки, просто пустой ArrayList. –