我在在部署ASP.net应用程序的时候,在IIS中都是创建在默认的应用池当中.我们能否在部署的时候创建自己的应用池呢?
本文就带你一起创建自己的应用池!
1
using
System;
2
using
System.IO;
3
using
System.DirectoryServices;
4
using
System.Reflection;
5
using
System.Runtime.InteropServices;
6
using
System.Collections;
7
8
namespace
System_DirectoryServices_DirectoryEntry_ConfigIIS
9
{
10
class
Program
11
{
12
static
void
Main(
string
[] args)
13
{
14
15
16
17
CreateAppPool(
"
IIS://Localhost/W3SVC/AppPools
"
,
"
MyAppPool
"
);
18
19
20
21
CreateVDir(
"
IIS://Localhost/W3SVC/1/Root
"
,
"
MyVDir
"
,
"
D:\\Inetpub\\Wwwroot
"
);
22
23
24
25
AssignVDirToAppPool(
"
IIS://Localhost/W3SVC/1/Root/MyVDir
"
,
"
MyAppPool
"
);
26
27
28
29
}
30
31
32
33
static
void
CreateAppPool(
string
metabasePath,
string
appPoolName)
34
{
35
//
metabasePath is of the form "IIS:
//
<servername>/W3SVC/AppPools"
36
//
for example "IIS:
//
localhost/W3SVC/AppPools"
37
//
appPoolName is of the form "<name>", for example, "MyAppPool"
38
Console.WriteLine(
"
\nCreating application pool named {0}/{1}:
"
, metabasePath, appPoolName);
39
40
try
41
{
42
if
(metabasePath.EndsWith(
"
/W3SVC/AppPools
"
))
43
{
44
DirectoryEntry newpool;
45
DirectoryEntry apppools
=
new
DirectoryEntry(metabasePath);
46
newpool
=
apppools.Children.Add(appPoolName,
"
IIsApplicationPool
"
);
47
newpool.CommitChanges();
48
Console.WriteLine(
"
Done.
"
);
49
}
50
else
51
Console.WriteLine(
"
Failed in CreateAppPool; application pools can only be created in the */W3SVC/AppPools node.
"
);
52
}
53
catch
(Exception ex)
54
{
55
Console.WriteLine(
"
Failed in CreateAppPool with the following exception: \n{0}
"
, ex.Message);
56
}
57
}
58
59
60
61
static
void
CreateVDir(
string
metabasePath,
string
vDirName,
string
physicalPath)
62
{
63
//
metabasePath is of the form "IIS:
//
<servername>/<service>/<siteID>/Root[/<vdir>]"
64
//
for example "IIS:
//
localhost/W3SVC/1/Root"
65
//
vDirName is of the form "<name>", for example, "MyNewVDir"
66
//
physicalPath is of the form "<drive>:\<path>", for example, "C:\Inetpub\Wwwroot"
67
Console.WriteLine(
"
\nCreating virtual directory {0}/{1}, mapping the Root application to {2}:
"
,
68
metabasePath, vDirName, physicalPath);
69
70
try
71
{
72
DirectoryEntry site
=
new
DirectoryEntry(metabasePath);
73
string
className
=
site.SchemaClassName.ToString();
74
if
((className.EndsWith(
"
Server
"
))
||
(className.EndsWith(
"
VirtualDir
"
)))
75
{
76
DirectoryEntries vdirs
=
site.Children;
77
DirectoryEntry newVDir
=
vdirs.Add(vDirName, (className.Replace(
"
Service
"
,
"
VirtualDir
"
)));
78
newVDir.Properties[
"
Path
"
][
0
]
=
physicalPath;
79
newVDir.Properties[
"
AccessScript
"
][
0
]
=
true
;
80
//
These properties are necessary for an application to be created.
81
newVDir.Properties[
"
AppFriendlyName
"
][
0
]
=
vDirName;
82
newVDir.Properties[
"
AppIsolated
"
][
0
]
=
"
1
"
;
83
newVDir.Properties[
"
AppRoot
"
][
0
]
=
"
/LM
"
+
metabasePath.Substring(metabasePath.IndexOf(
"
/
"
, (
"
IIS://
"
.Length)));
84
85
newVDir.CommitChanges();
86
87
Console.WriteLine(
"
Done.
"
);
88
}
89
else
90
Console.WriteLine(
"
Failed. A virtual directory can only be created in a site or virtual directory node.
"
);
91
}
92
catch
(Exception ex)
93
{
94
Console.WriteLine(
"
Failed in CreateVDir with the following exception: \n{0}
"
, ex.Message);
95
}
96
}
97
98
99
100
static
void
AssignVDirToAppPool(
string
metabasePath,
string
appPoolName)
101
{
102
//
metabasePath is of the form "IIS:
//
<servername>/W3SVC/<siteID>/Root[/<vDir>]"
103
//
for example "IIS:
//
localhost/W3SVC/1/Root/MyVDir"
104
//
appPoolName is of the form "<name>", for example, "MyAppPool"
105
Console.WriteLine(
"
\nAssigning application {0} to the application pool named {1}:
"
, metabasePath, appPoolName);
106
107
try
108
{
109
DirectoryEntry vDir
=
new
DirectoryEntry(metabasePath);
110
string
className
=
vDir.SchemaClassName.ToString();
111
if
(className.EndsWith(
"
VirtualDir
"
))
112
{
113
object
[] param
=
{
0
, appPoolName,
true
};
114
vDir.Invoke(
"
AppCreate3
"
, param);
115
vDir.Properties[
"
AppIsolated
"
][
0
]
=
"
2
"
;
116
Console.WriteLine(
"
Done.
"
);
117
}
118
else
119
Console.WriteLine(
"
Failed in AssignVDirToAppPool; only virtual directories can be assigned to application pools
"
);
120
}
121
catch
(Exception ex)
122
{
123
Console.WriteLine(
"
Failed in AssignVDirToAppPool with the following exception: \n{0}
"
, ex.Message);
124
}
125
}
126
127
128
129
}
130
}
131
132
133