设为首页 收藏本站
查看: 1974|回复: 0

[经验分享] C#建立IIS虚拟目录站点

[复制链接]

尚未签到

发表于 2015-8-13 12:21:15 | 显示全部楼层 |阅读模式
在主机上创建虚拟目录,并修改默认站点的端口为8080:

DSC0000.gif DSC0001.gif Code
/***************************************************************************************************
* Filename:            IISVirtualWebSite.cs
* Module:              IIS 创建虚拟目录
* Copyright:           2008 穗联软件 版权所有
* Author:              周林郁
* Created Date:        2008-12-29
* Last Modified Data:  
* Description:         需要引用COM 组件,Active DS IIS Namespace Provider
***************************************************************************************************/
using System;
using System.Collections.Generic;
//using System.Linq;
using System.Text;
using System.IO;
using System.Collections;
using System.DirectoryServices;
namespace MonitorService
{
    public class IISVirtualWebSite
    {
        WriteLog wl = new WriteLog();
        /// <summary>
        /// 在主机上创建虚拟目录,并修改默认站点的端口为8080
        /// </summary>
        public string CreatVirWebSite(string _virtualDirName, string _physicalPath)
        {
            try
            {
                // 站点ID
                int _WebSiteID = 1;
                _WebSiteID = GetSiteID("localhost", "localhost");
                if (_WebSiteID == 0)
                {
                    _WebSiteID = 1;
                }
                if (_virtualDirName == "")
                {
                    _virtualDirName = "Monitor";
                }
                String constIISWebSiteRoot = "IIS://localhost/W3SVC/" + _WebSiteID.ToString() + "/ROOT";
                string virtualDirName = _virtualDirName; //虚拟目录名称:Monitor
                string physicalPath = _physicalPath; //虚拟目录物理路径 C:\1

                if (physicalPath == "")
                {
                    physicalPath = @"D:\Program Files\Macromedia\Flash Media Server 2\applications\MonitorLocal\streams\_definst_\";
                }
                DirectoryEntry root = new DirectoryEntry(constIISWebSiteRoot);
                // 如果虚拟目录存在,则删除
                foreach (System.DirectoryServices.DirectoryEntry v in root.Children)
                {
                    if (v.Name == _virtualDirName)
                    {
                        // Delete the specified virtual directory if it already exists

                        try
                        {
                            root.Invoke("Delete", new string[] { v.SchemaClassName, _virtualDirName });
                            root.CommitChanges();
                        }
                        catch (Exception ex)
                        {
                            //sRet += ex.Message;
                        }
                    }
                }
                DirectoryEntry tbEntry = root.Children.Add(virtualDirName, "IIsWebVirtualDir");
                tbEntry.Properties["Path"][0] = physicalPath;  //虚拟目录物理路径
                tbEntry.Invoke("AppCreate", true);               
                tbEntry.Properties["AccessRead"][0] = true;   //设置读取权限
                tbEntry.Properties["ContentIndexed"][0] = true;
                tbEntry.Properties["DefaultDoc"][0] = "index.aspx,Default.aspx"; //设置默认文档,多值情况下中间用逗号分割
                tbEntry.Properties["AppFriendlyName"][0] = virtualDirName; //虚拟目录名称:Monitor
                tbEntry.Properties["AccessScript"][0] = true; //执行权限
                tbEntry.Properties["AppIsolated"][0] = "1";
                tbEntry.Properties["DontLog"][0] = true;  // 是否记录日志
                //tbEntry.Properties["AuthFlags"][0] = 0; // 设置目录的安全性,0表示不允许匿名访问,1为允许,3为基本身份验证,7为windows继承身份验证
                tbEntry.Properties["AuthFlags"][0] = 1;
                tbEntry.CommitChanges();
                // 增加MIME 的类型:flv
                SetMimeTypeProperty(constIISWebSiteRoot, ".flv", "flv");
                // 修改IIS属性
                SetSingleProperty("IIS://localhost/W3SVC/" + _WebSiteID.ToString(), "ServerBindings", ":8080:");
                ////得到现默认站点的IP 端口 描述      
                //string strServerBindings = root.Properties["ServerBindings"].Value.ToString();
                ////解出端口Port
                //string[] strArr = strServerBindings.Split(':');
                ////重新赋值为8080
                //root.Properties["ServerBindings"].Value = strArr[0] + ":8080:" + strArr[2];

                root.CommitChanges();//确认更改

                return "";
            }
            catch(Exception ex)
            {
                //wl.WriteLogMsg("[MonitorService]:创建虚拟目录失败: " + DateTime.Now.ToString() + "\r\n"+ ex.ToString() +"\r\n");
                return ex.ToString();
            }
            
        }

        #region 根据站点名称获取站点ID(标识)
        /// <summary>
        /// 根据站点名称获取站点ID(标识)
        /// </summary>
        /// <param name="webSiteName">站点名称</param>
        /// <param name="serverIP">主机IP</param>
        /// <returns>站点ID</returns>
        private int GetSiteID(string webSiteName, string serverIP)
        {
            int SiteID = 0;
            try
            {
                DirectoryEntry root = new DirectoryEntry(@"IIS://" + serverIP + "/W3SVC");
                foreach (DirectoryEntry Child in root.Children)
                {
                    PropertyValueCollection pvc = Child.Properties["ServerBindings"];
                    string WName = Child.Properties["ServerComment"][0].ToString();
                    if (webSiteName == WName)
                    {
                        SiteID = Convert.ToInt32(Child.Name);
                        return SiteID;
                    }
                    WName = "";
                }
            }
            catch
            {
                SiteID = 0;
            }
            return SiteID;
        }
        #endregion
        /// <summary>
        /// 设置IIS的MIME类型,SetMimeTypeProperty("IIS://localhost/W3SVC/1/Root", ".hlp", "application/winhlp");
        /// </summary>
        /// <param name="metabasePath"></param>
        /// <param name="newExtension"></param>
        /// <param name="newMimeType"></param>
        static void SetMimeTypeProperty(string metabasePath, string newExtension, string newMimeType)
        {
            //  metabasePath is of the form "IIS://<servername>/<path>"
            //    for example "IIS://localhost/W3SVC/1/Root"
            //  newExtension is of the form ".<extension>", for example, ".hlp"
            //  newMimeType is of the form "<application>", for example, "application/winhlp"
            Console.WriteLine("\nAdding {1}->{2} to the MimeMap property at {0}:", metabasePath, newExtension, newMimeType);
            try
            {
                DirectoryEntry path = new DirectoryEntry(metabasePath);
                PropertyValueCollection propValues = path.Properties["MimeMap"];
                Console.WriteLine(" Old value of MimeMap has {0} elements", propValues.Count);
                object exists = null;
                foreach (object value in propValues)
                {
                    // IISOle requires a reference to the Active DS IIS Namespace Provider in Visual Studio .NET
                    IISOle.IISMimeType mimetypeObj = (IISOle.IISMimeType)value;
                    Console.WriteLine("  {0}->{1}", mimetypeObj.Extension, mimetypeObj.MimeType);
                    if (newExtension == mimetypeObj.Extension)
                        exists = value;
                }
                if (null != exists)
                {
                    propValues.Remove(exists);
                    Console.WriteLine(" Found an entry for {0}; removing it before adding the new one.", newExtension);
                }
                IISOle.MimeMapClass newObj = new IISOle.MimeMapClass();
                newObj.Extension = newExtension;
                newObj.MimeType = newMimeType;
                propValues.Add(newObj);
                path.CommitChanges();
                Console.WriteLine(" Done.");
            }
            catch (Exception ex)
            {
                if ("HRESULT 0x80005006" == ex.Message)
                    Console.WriteLine(" Property MimeMap does not exist at {0}", metabasePath);
                else
                    Console.WriteLine("Failed in SetMimeTypeProperty with the following exception: \n{0}", ex.Message);
            }
        }
        /// <summary>
        /// 修改IIS属性
        /// </summary>
        /// <param name="metabasePath"></param>
        /// <param name="propertyName"></param>
        /// <param name="newValue"></param>
        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);
            }
        }
    }     
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-98458-1-1.html 上篇帖子: 小问题 小技巧 :创建虚拟目录并将IIS里面.net配置版本设为2.0 下篇帖子: ODP.NET Oracle12.1版本免安装发布(IIS WebServices)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表