可以的,ADSI, WMI, System.Directory, ABO等四种方式都可以操作
具体可以查看一下MSDN里的Web Development\Server Technologies\Internet Information Services SDK\IIS Programmatic Administration SDK\Using IIS Programmatic Administration,里面有很多例子。
不过你要确保访问A服务器上的asp.net的应用程序具有B服务器的IIS的管理权限。
下面这个是用System.DirectoryServices创建site和vitual directory的例子
Internet Service Providers (ISPs) that provide Web hosting services to customers, need to configure their IIS servers frequently. Some ISPs use forms to programmatically enroll new customers and add a new Web site or virtual directory for them. The new site or virtual directory can be put in a new application pool to isolate it from other applications on the server.
Example Code
The following example shows you how to use the C# programming language to add a new Web site and virtual directory with System.DirectoryServices.
To keep this code example concise, it does not include code access security (CAS) parameters or parameter checking. For more information, see Code Access Security and Validating User Input to Avoid Attacks. Additionally, you can instantiate your System.DirectoryServices.DirectoryEntry object with an authentication parameter.
C# Copy Code
using System;
using System.IO;
using System.DirectoryServices;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Collections;
namespace System_DirectoryServices_DirectoryEntry_ConfigIIS
{
class Program
{
static void Main(string[] args)
{
...
CreateSite("IIS://Localhost/W3SVC", "555", "MySite", "D:\\Inetpub\\Wwwroot");
...
SetSingleProperty("IIS://Localhost/W3SVC/555", "ServerBindings", ":8080:");
...
CreateVDir("IIS://Localhost/W3SVC/1/Root", "MyVDir", "D:\\Inetpub\\Wwwroot");
...
}
...
static void CreateSite(string metabasePath, string siteID, string siteName, string physicalPath)
{
// metabasePath is of the form "IIS://<servername>/<service>"
// for example "IIS://localhost/W3SVC"
// siteID is of the form "<number>", for example "555"
// siteName is of the form "<name>", for example, "My New Site"
// physicalPath is of the form "<drive>:\<path>", for example, "C:\Inetpub\Wwwroot"
Console.WriteLine("\nCreating site {0}/{1}, mapping the Root application to {2}:",
metabasePath, siteID, physicalPath);
try
{
DirectoryEntry service = new DirectoryEntry(metabasePath);
string className = service.SchemaClassName.ToString();
if (className.EndsWith("Service"))
{
DirectoryEntries sites = service.Children;
DirectoryEntry newSite = sites.Add(siteID, (className.Replace("Service", "Server")));
newSite.Properties["ServerComment"][0] = siteName;
newSite.CommitChanges();
DirectoryEntry newRoot;
newRoot = newSite.Children.Add("Root", "IIsWebVirtualDir");
newRoot.Properties["Path"][0] = physicalPath;
newRoot.Properties["AccessScript"][0] = true;
newRoot.CommitChanges();
Console.WriteLine(" Done. Your site will not start until you set the ServerBindings or SecureBindings property.");
}
else
Console.WriteLine(" Failed. A site can only be created in a service node.");
}
catch (Exception ex)
{
Console.WriteLine("Failed in CreateSite with the following exception: \n{0}", ex.Message);
}
}
...
static void SetSingleProperty(string metabasePath, string propertyName, object newValue)
{
// metabasePath is of the form "IIS://<servername>/<path>"
// for example "IIS://localhost/W3SVC/1"
// propertyName is of the form "<propertyName>", for example "ServerBindings"
// value is of the form "<intStringOrBool>", for example, ":80:"
Console.WriteLine("\nSetting single property at {0}/{1} to {2} ({3}):",
metabasePath, propertyName, newValue, newValue.GetType().ToString());
try
{
DirectoryEntry path = new DirectoryEntry(metabasePath);
PropertyValueCollection propValues = path.Properties[propertyName];
string oldType = propValues.Value.GetType().ToString();
string newType = newValue.GetType().ToString();
Console.WriteLine(" Old value of {0} is {1} ({2})", propertyName, propValues.Value, oldType);
if (newType == oldType)
{
path.Properties[propertyName][0] = newValue;
path.CommitChanges();
Console.WriteLine("Done");
}
else
Console.WriteLine(" Failed in SetSingleProperty; type of new value does not match property");
}
catch (Exception ex)
{
if ("HRESULT 0x80005006" == ex.Message)
Console.WriteLine(" Property {0} does not exist at {1}", propertyName, metabasePath);
else
Console.WriteLine("Failed in SetSingleProperty with the following exception: \n{0}", ex.Message);
}
}
...
static void CreateVDir(string metabasePath, string vDirName, string physicalPath)
{
// metabasePath is of the form "IIS://<servername>/<service>/<siteID>/Root[/<vdir>]"
// for example "IIS://localhost/W3SVC/1/Root"
// vDirName is of the form "<name>", for example, "MyNewVDir"
// physicalPath is of the form "<drive>:\<path>", for example, "C:\Inetpub\Wwwroot"
Console.WriteLine("\nCreating virtual directory {0}/{1}, mapping the Root application to {2}:",
metabasePath, vDirName, physicalPath);
try
{
DirectoryEntry site = new DirectoryEntry(metabasePath);
string className = site.SchemaClassName.ToString();
if ((className.EndsWith("Server")) || (className.EndsWith("VirtualDir")))
{
DirectoryEntries vdirs = site.Children;
DirectoryEntry newVDir = vdirs.Add(vDirName, (className.Replace("Service", "VirtualDir")));
newVDir.Properties["Path"][0] = physicalPath;
newVDir.Properties["AccessScript"][0] = true;
// These properties are necessary for an application to be created.
newVDir.Properties["AppFriendlyName"][0] = vDirName;
newVDir.Properties["AppIsolated"][0] = "1";
newVDir.Properties["AppRoot"][0] = "/LM" + metabasePath.Substring(metabasePath.IndexOf("/", ("IIS://".Length)));
newVDir.CommitChanges();
Console.WriteLine(" Done.");
}
else
Console.WriteLine(" Failed. A virtual directory can only be created in a site or virtual directory node.");
}
catch (Exception ex)
{
Console.WriteLine("Failed in CreateVDir with the following exception: \n{0}", ex.Message);
}
}
...
}
}
具体可以查看一下MSDN里的Web Development\Server Technologies\Internet Information Services SDK\IIS Programmatic Administration SDK\Using IIS Programmatic Administration,里面有很多例子。
不过你要确保访问A服务器上的asp.net的应用程序具有B服务器的IIS的管理权限。
下面这个是用System.DirectoryServices创建site和vitual directory的例子
Internet Service Providers (ISPs) that provide Web hosting services to customers, need to configure their IIS servers frequently. Some ISPs use forms to programmatically enroll new customers and add a new Web site or virtual directory for them. The new site or virtual directory can be put in a new application pool to isolate it from other applications on the server.
Example Code
The following example shows you how to use the C# programming language to add a new Web site and virtual directory with System.DirectoryServices.
To keep this code example concise, it does not include code access security (CAS) parameters or parameter checking. For more information, see Code Access Security and Validating User Input to Avoid Attacks. Additionally, you can instantiate your System.DirectoryServices.DirectoryEntry object with an authentication parameter.
C# Copy Code
using System;
using System.IO;
using System.DirectoryServices;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Collections;
namespace System_DirectoryServices_DirectoryEntry_ConfigIIS
{
class Program
{
static void Main(string[] args)
{
...
CreateSite("IIS://Localhost/W3SVC", "555", "MySite", "D:\\Inetpub\\Wwwroot");
...
SetSingleProperty("IIS://Localhost/W3SVC/555", "ServerBindings", ":8080:");
...
CreateVDir("IIS://Localhost/W3SVC/1/Root", "MyVDir", "D:\\Inetpub\\Wwwroot");
...
}
...
static void CreateSite(string metabasePath, string siteID, string siteName, string physicalPath)
{
// metabasePath is of the form "IIS://<servername>/<service>"
// for example "IIS://localhost/W3SVC"
// siteID is of the form "<number>", for example "555"
// siteName is of the form "<name>", for example, "My New Site"
// physicalPath is of the form "<drive>:\<path>", for example, "C:\Inetpub\Wwwroot"
Console.WriteLine("\nCreating site {0}/{1}, mapping the Root application to {2}:",
metabasePath, siteID, physicalPath);
try
{
DirectoryEntry service = new DirectoryEntry(metabasePath);
string className = service.SchemaClassName.ToString();
if (className.EndsWith("Service"))
{
DirectoryEntries sites = service.Children;
DirectoryEntry newSite = sites.Add(siteID, (className.Replace("Service", "Server")));
newSite.Properties["ServerComment"][0] = siteName;
newSite.CommitChanges();
DirectoryEntry newRoot;
newRoot = newSite.Children.Add("Root", "IIsWebVirtualDir");
newRoot.Properties["Path"][0] = physicalPath;
newRoot.Properties["AccessScript"][0] = true;
newRoot.CommitChanges();
Console.WriteLine(" Done. Your site will not start until you set the ServerBindings or SecureBindings property.");
}
else
Console.WriteLine(" Failed. A site can only be created in a service node.");
}
catch (Exception ex)
{
Console.WriteLine("Failed in CreateSite with the following exception: \n{0}", ex.Message);
}
}
...
static void SetSingleProperty(string metabasePath, string propertyName, object newValue)
{
// metabasePath is of the form "IIS://<servername>/<path>"
// for example "IIS://localhost/W3SVC/1"
// propertyName is of the form "<propertyName>", for example "ServerBindings"
// value is of the form "<intStringOrBool>", for example, ":80:"
Console.WriteLine("\nSetting single property at {0}/{1} to {2} ({3}):",
metabasePath, propertyName, newValue, newValue.GetType().ToString());
try
{
DirectoryEntry path = new DirectoryEntry(metabasePath);
PropertyValueCollection propValues = path.Properties[propertyName];
string oldType = propValues.Value.GetType().ToString();
string newType = newValue.GetType().ToString();
Console.WriteLine(" Old value of {0} is {1} ({2})", propertyName, propValues.Value, oldType);
if (newType == oldType)
{
path.Properties[propertyName][0] = newValue;
path.CommitChanges();
Console.WriteLine("Done");
}
else
Console.WriteLine(" Failed in SetSingleProperty; type of new value does not match property");
}
catch (Exception ex)
{
if ("HRESULT 0x80005006" == ex.Message)
Console.WriteLine(" Property {0} does not exist at {1}", propertyName, metabasePath);
else
Console.WriteLine("Failed in SetSingleProperty with the following exception: \n{0}", ex.Message);
}
}
...
static void CreateVDir(string metabasePath, string vDirName, string physicalPath)
{
// metabasePath is of the form "IIS://<servername>/<service>/<siteID>/Root[/<vdir>]"
// for example "IIS://localhost/W3SVC/1/Root"
// vDirName is of the form "<name>", for example, "MyNewVDir"
// physicalPath is of the form "<drive>:\<path>", for example, "C:\Inetpub\Wwwroot"
Console.WriteLine("\nCreating virtual directory {0}/{1}, mapping the Root application to {2}:",
metabasePath, vDirName, physicalPath);
try
{
DirectoryEntry site = new DirectoryEntry(metabasePath);
string className = site.SchemaClassName.ToString();
if ((className.EndsWith("Server")) || (className.EndsWith("VirtualDir")))
{
DirectoryEntries vdirs = site.Children;
DirectoryEntry newVDir = vdirs.Add(vDirName, (className.Replace("Service", "VirtualDir")));
newVDir.Properties["Path"][0] = physicalPath;
newVDir.Properties["AccessScript"][0] = true;
// These properties are necessary for an application to be created.
newVDir.Properties["AppFriendlyName"][0] = vDirName;
newVDir.Properties["AppIsolated"][0] = "1";
newVDir.Properties["AppRoot"][0] = "/LM" + metabasePath.Substring(metabasePath.IndexOf("/", ("IIS://".Length)));
newVDir.CommitChanges();
Console.WriteLine(" Done.");
}
else
Console.WriteLine(" Failed. A virtual directory can only be created in a site or virtual directory node.");
}
catch (Exception ex)
{
Console.WriteLine("Failed in CreateVDir with the following exception: \n{0}", ex.Message);
}
}
...
}
}