Я работаю над программным обеспечением ASP.Net для веб-сайтов, используя WMI (System.Managment) и C #.
Я пытаюсь создать FTP-сайт на моем «Целевом сервере», расположенном где-то в локальной сети, во время выполнения кода на моем хост-компьютере. У меня проблемы с запуском FTP-сайта после его создания.
Сообщение об ошибке: «Недопустимый класс» в следующей строке:
ManagementObject site = new ManagementObject(
new ManagementPath(string.Format(@"IIsFtpServer.Name='MSFTPSVC/{0}'", siteId)), null);
**site.InvokeMethod("Start", null);**
Вот моя полная функция.
public static String CreateFtpsite(String serverName,
String ip,String ServerComment,int AccessFlags,
String pathToRoot, String hostName, String domainName, int port)
{
//ConnectionOptions options = new ConnectionOptions();
//options.Authentication = AuthenticationLevel.Connect;
//options.EnablePrivileges = true;
//options.Impersonation = ImpersonationLevel.Impersonate;
ConnectionOptions options = SetUpAuthorization();
ManagementScope scope =
new ManagementScope(string.Format(@"\\{0}\root\MicrosoftIISv2", serverName), options);
scope.Connect();
ManagementObject oW3SVC = new ManagementObject(scope,
new ManagementPath(@"IIsFtpService='MSFTPSVC'"), null);
ManagementBaseObject[] serverBindings = new ManagementBaseObject[3];
/*serverBindings[0] = CreateServerBinding(scope,
string.Format("{0}.{1}", hostName, domainName), ip, port);
*/
serverBindings[0] = CreateServerBinding(scope,
string.Format("{0}", hostName, domainName), ip, port);
serverBindings[1] = CreateServerBinding(scope,
string.Format(ip, hostName, domainName), ip, port);
serverBindings[2] = CreateServerBinding(scope,
string.Format("127.0.0.1", hostName, domainName), ip, port);
ManagementBaseObject inputParameters = oW3SVC.GetMethodParameters("CreateNewSite");
inputParameters["ServerBindings"] = serverBindings;
inputParameters["ServerComment"] = ServerComment;
inputParameters["PathOfRootVirtualDir"] = pathToRoot;
ManagementBaseObject outParameter =
oW3SVC.InvokeMethod("CreateNewSite", inputParameters, null);
string siteId = Convert.ToString(
outParameter.Properties["ReturnValue"].Value).Replace(
"IIsFtpServer='MSFTPSVC/", "").Replace("'", "");
ManagementObject oFtpVirtDir = new ManagementObject(scope,
new ManagementPath(string.Format(
@"IIsFtpVirtualDirSetting.Name='MSFTPSVC/{0}/root'", siteId)), null);
oFtpVirtDir.Properties["AccessFlags"].Value = AccessFlags ;
oFtpVirtDir.Properties["Path"].Value = pathToRoot;
ManagementObject oFtpVirtDirProperties = new ManagementObject(scope,
new ManagementPath(string.Format(@"IIsFtpServerSetting.Name='MSFTPSVC/{0}'", siteId)), null);
oFtpVirtDirProperties.Properties["AllowAnonymous"].Value = true;
oFtpVirtDirProperties.Properties["AnonymousOnly"].Value = true;
oFtpVirtDirProperties.Properties["AnonymousUserName"].Value = @"DevIIS\Administrator";
oFtpVirtDirProperties.Properties["AnonymousUserPass"].Value = "Passw0rd";
oFtpVirtDirProperties.Properties["MaxConnections"].Value = 555;
oFtpVirtDirProperties.Properties["ServerAutoStart"].Value = true;
oFtpVirtDirProperties.Properties["UserIsolationMode"].Value = 1;
oFtpVirtDirProperties.Properties["ConnectionTimeout"].Value = 1234 ;
oFtpVirtDirProperties.Properties["LogFileTruncateSize"].Value = 54321;
oFtpVirtDirProperties.Put();
ManagementObject site = new ManagementObject(
new ManagementPath(string.Format(@"IIsFtpServer.Name='MSFTPSVC/{0}'", siteId)), null);
site.InvokeMethod("Start", null); //Error occurs Here (Invalid Class)
return siteId;
}
public static ConnectionOptions SetUpAuthorization()
{
ConnectionOptions options = new ConnectionOptions();
options.Authentication = AuthenticationLevel.PacketPrivacy;
options.EnablePrivileges = true;
options.Impersonation = ImpersonationLevel.Impersonate;
options.Username = @"DevIIS\Administrator";
options.Password = "Passw0rd";
return options;
}
При анализе кода я обнаружил, что объект "site" выдает исключение "Invalid Class" в "site.ClassPath".
Я также пытался использовать следующую строку, но там есть та же ошибка.
ManagementObject site = new ManagementObject(scope,
new ManagementPath(Convert.ToString(
outParameter.Properties["ReturnValue"].Value)), null);
site.InvokeMethod("Start", null);
Но FTP-сайт создан и все его свойства установлены, но он не запускается с помощью кода. Запустить его можно вручную, зайдя в IIS Manager.
Код отлично работает на IIS 6.0 и (так как я использую WMI), я ожидаю, что он должен нормально работать на IIS 7.0 или более поздней версии.
Я делаю что-то не так, но не могу догадаться, где. Пожалуйста, помогите. Спасибо.
Спасибо