我一直负责找出是什么原因造成的问题与这段代码:虚拟服务器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上运行的Web服务(在同一台机器上)运行。
或者,我可以使用在IIS Web服务代码(在虚拟服务器上),并获得正确的返回值:
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 Web服务调用?
任何帮助,将不胜感激。
UPDATE:经过多次电话时间都不同程度的MS支持,the've得出的结论,这是“作为设计的”。
由于它在虚拟网络适配器驱动程序的驱动程序级别上,答案是我们应该更改我们的代码以“解决该问题”。
这意味着你不能可靠的测试代码在虚拟服务器上,除非您提供了使用在物理服务器上,因为我们不能保证服务器是精确复制品相同的代码...
第一个错误导致了什么? – Tomalak 2009-02-13 22:49:11