c# 在windows中操作IIS设置FTP服务器的示例

什么是FTP

FTP(File Transfer Protocol)是TCP/IP网络上两台计算机传送文件的协议,使得主机间可以共享文件.可以将 Internet 信息服务 (IIS) 配置为作为 FTP 服务器来运行。 这样,其他计算机便可以连接到服务器并将文件复制到服务器或者从服务器复制文件。 例如,如果您在自己的计算机上承载网站,并且希望允许远程用户连接到您的计算机并将他们的文件复制到服务器,则可以将 IIS 配置为充当 FTP 服务器。

主要实现方式

下面主要讲解一下,在Window的IIS中创建FTP的Site。

1、创建站点

 public int createFtpSite(string ftpname,string path){

      int errorCode = ErrorCode.Succeed;
      if (ftpname == "" && path == "")
      {
        try
        {
          ServerManager iisManager = new ServerManager();
          Configuration cfg = iisManager.GetApplicationHostConfiguration();
          /*---- 停止21端口 ----*/
          try
          {
            /*---- sites ----*/
            foreach (var ftpsite in iisManager.Sites)
            {
              /*
              * 站点描述
              */
              string sitename = ftpsite.Name;
              /*
              * 站点绑定域名和端口
              */
              foreach (Binding binding in ftpsite.Bindings)
              {
                try
                {
                  string currentServerBindings = binding.GetAttributeValue("BindingInformation").ToString();
                  string port = currentServerBindings.Split(":".ToArray())[1];
                  if (port == "21")
                  {
                    try
                    {
                      //stop site
                      ftpsite.Stop();
                    }
                    catch
                    {
                      //doing nothing
                    }
                    break;
                  }
                }
                catch
                {
                  //doing nothing
                }
              }
            }
            //提交更改
            iisManager.CommitChanges();
          }
          catch
          {
            //do nothing
          }
          /*
           * 创建FTP
          */
          if (!System.IO.Directory.Exists(System.Configuration.ConfigurationManager.AppSettings.Get("defaultftpath")))//创建站点路径
          {
            System.IO.Directory.CreateDirectory(System.Configuration.ConfigurationManager.AppSettings.Get("defaultftpath"));
          }
          Site site = iisManager.Sites.Add(System.Configuration.ConfigurationManager.AppSettings.Get("defaultftp"), "ftp", string.Format("*:{0}:", "21"), System.Configuration.ConfigurationManager.AppSettings.Get("defaultftpath"));
          iisManager.CommitChanges();
          //设置FTP SSL权限
          SetFtpSSL();
          //设置FTP Everyone权限
          IISUtil.IISCore.AddSiteUtil addsiteUtil = new AddSiteUtil();
          try
          {
            string config_rootpath = System.Configuration.ConfigurationManager.AppSettings.Get("defaultftpath");
            //string rootpath = path.Substring(0, path.IndexOf(ftpname) - 1) + "\\ftproot";
            if (!System.IO.Directory.Exists(config_rootpath))
            {
              System.IO.Directory.CreateDirectory(config_rootpath);
            }
            addsiteUtil.icaclsSet("Everyone", System.Configuration.ConfigurationManager.AppSettings.Get("defaultftpath"));
            /*---- hide ----*/
            System.IO.File.SetAttributes(config_rootpath, System.IO.FileAttributes.Hidden);
          }
          catch
          {

          }
        }
        catch
        {
          errorCode = ErrorCode.ftpSiteFail;
        }

      }
      else
      {
        if (!getFtpState(ftpname))//判断ftp用户是否存在
        {
          /*---- FTP状态检查 ----*/
          FtpStateInit();
          try
          {
            using (ServerManager iisManager = new ServerManager())
            {
              Site site = iisManager.Sites.FirstOrDefault(o => ((string)o["name"]).Contains(System.Configuration.ConfigurationManager.AppSettings.Get("defaultftp")));
              var vird = site.Applications[0].VirtualDirectories["/" + ftpname];
              if (vird == null) { site.Applications[0].VirtualDirectories.Add("/" + ftpname, path); }
              else { errorCode = ErrorCode.ftpExists; }
              iisManager.CommitChanges();
              //添加FTP访问权限
              SetFtpAccess(ftpname);
            }
          }
          catch
          {
            errorCode = ErrorCode.ftpSiteFail;
          }
        }
        else
        {
          errorCode = ErrorCode.ftpExists;
        }

      }
      return errorCode;
    }

2、站点列表

/// <summary>
    /// iis6获取所有ftp站点信息
    /// </summary>
    /// <param name="newsitename"></param>
    /// <returns></returns>
    public static List<string> iGetFtpInfos()
    {
      List<string> ftpinfos = new List<string>();
      try
      {
        string ftproot = System.Configuration.ConfigurationManager.AppSettings.Get("defaultftp");
        string ftpname = "";//用户名
        string ftppass = "";//密码
        string ftppath = "";//物理路径
        string iisversion = "";//iis版本
        string majorversion = IISCore.IISInfoUtil.SGetIISMajorVersion();
        if (majorversion == "")
        {
          iisversion = "未知";
        }
        else
        {
          iisversion = majorversion.ToString();
        }
        /*
         * 创建FTP 子站点
         */
        var siteEntry = new DirectoryEntry("IIS://localhost/MSFTPSVC");//IIS6管理对象
        DirectoryEntry rootentry = new DirectoryEntry("IIS://localhost/W3SVC");//创建IIS管理对象
        foreach (DirectoryEntry sitechild in siteEntry.Children)
        {
          if (!sitechild.SchemaClassName.EqualsEx("IIsFtpServer"))  //IIsFtpServer代表FTP
            continue;
          string yftpname = sitechild.Properties["ServerComment"].Value.ToString();
          string defaultftpname = System.Configuration.ConfigurationManager.AppSettings.Get("defaultftp");
          if (yftpname == defaultftpname)
          {
            try
            {
              //获取站点信息
              var root = sitechild.Children.Find("ROOT", "IIsFtpVirtualDir");
              DirectoryEntries ftps = root.Children;
              foreach (DirectoryEntry ftp in ftps)
              {
                ftpname = ftp.Name;
                /*
                 * 获取密码
                 */
                try
                {
                  /*
                  * 循环站点获取站点信息
                  */
                  foreach (DirectoryEntry child in rootentry.Children)
                  {
                    if (child.SchemaClassName == "IIsWebServer" && child.Properties["ServerComment"].Value.ToString() == ftpname)
                    {
                      ftppass = child.Properties["AnonymousUserPass"].Value.ToString();
                      /*
                       * 获取站点目录
                       */
                      foreach (DirectoryEntry rootChild in child.Children)
                      {
                        string name = rootChild.Name.ToString();
                        if ((rootChild.SchemaClassName == "IIsWebVirtualDir") && (rootChild.Name.ToString().ToLower() == "root"))
                        {
                          if (rootChild.Properties["Path"].Value == null)
                          {
                            ftppath = "";
                          }
                          else
                          {
                            ftppath = rootChild.Properties["Path"].Value.ToString().Substring(0, rootChild.Properties["Path"].Value.ToString().LastIndexOf("\\"));
                          }
                        }
                      }
                    }
                  }
                }
                catch
                {

                }
                /*
                 * 获取路径
                 */
                if(ftpname != "")
                  ftpinfos.Add(ftproot + "-@-" + ftpname + "-@-" + ftppass + "-@-" + ftppath + "-@-" + iisversion);//添加到站点信息
              }
            }
            catch
            {

            }
          }
        }
      }
      catch
      {
      }
      return ftpinfos;//返回数据
    }

3、删除站点

 public static bool DeleteQFtp(string ftpname)
    {
      bool flag = false;
      try{

        /*
        * 删除FTP 子站点
        */
        var siteEntry = new DirectoryEntry("IIS://localhost/MSFTPSVC");//IIS6管理对象
        if (ftpname != "")
        {
          foreach (DirectoryEntry sitechild in siteEntry.Children)
          {
            if (!sitechild.SchemaClassName.EqualsEx("IIsFtpServer"))  //IIsFtpServer代表FTP
              continue;
            string yftpname = sitechild.Properties["ServerComment"].Value.ToString();
            if (yftpname.ToLower() == System.Configuration.ConfigurationManager.AppSettings.Get("defaultftp").ToLower())
            {
              try
              {
                DirectoryEntry root = sitechild.Children.Find("ROOT", "IIsFtpVirtualDir");
                var ftpchild = root.Children.Find(ftpname, "IIsFtpVirtualDir");
                if (ftpchild != null)
                {
                  //删除
                  root.Children.Remove(ftpchild);
                  root.CommitChanges();
                  sitechild.CommitChanges();
                  siteEntry.CommitChanges();
                  flag = true;
                }
              }
              catch
              {
                flag = false;
              }
            }
          }
        }
      }
      catch
      {
      }
      return flag;
    }

以上就是c# 在windows中操作IIS设置FTP服务器的示例的详细内容,更多关于c# 设置FTP服务器的资料请关注我们其它相关文章!

(0)

相关推荐

  • C#如何控制IIS动态添加删除网站详解

    我的目的是在Winform程序里面,可以直接启动一个HTTP服务端,给下游客户连接使用. 查找相关技术,有两种方法: 1.使用C#动态添加网站应用到IIS中,借用IIS的管理能力来提供HTTP接口.本文即对此做说明 2.在Winform程序中实现Web服务器逻辑,自己监听和管理客户端请求: 利用IIS7自带类库管理IIS现在变的更强大更方便,而完全可以不需要用DirecotryEntry这个类了(乐博网中很多.net管理iis6.0的文章都用到了DirecotryEntry这个类 ),Micro

  • IIS下调用证书出现异常的解决方法 (C#)

    程序发布前,跑在vs上是没问题的,当发布后,程序就报错了.通过系统日志找到了错误所在:证书调用时出现了异常.原因是:在IIS上调用证书是需要配置的,具体配置如下: 一. 确保证书已安装 1. 点击 [开始] -> [运行] -> 键入[mmc] 进入"控制台"界面 -> 选择[文件] -> [添加/删除管理单元] 2. 选择[证书] -> [计算机账户] -> [下一步] -> [完成] 3. 选择[个人] -> [证书] -> [

  • C# FTP,GetResponse(),远程服务器返回错误

    FtpWebRequest类实现ftp功能的一般过程 1.创建一个FtpWebRequest对象,指向ftp服务器的uri 2.设置ftp的执行方法(上传,下载等) 3.给FtpWebRequest对象设置属性(是否支持ssl,是否使用二进制传输等) 4.设置登录验证(用户名,密码) 5.执行请求 6.接收相应流(如果需要的话) 7.如果没有打开的流,则关闭ftp请求 其中一些重要的属性如下: ·Credentials - 指定登录ftp服务器的用户名和密码. ·KeepAlive - 指定连接

  • C#实现获取IIS站点及虚拟目录信息的方法

    本文实例讲述了C#实现获取IIS站点及虚拟目录信息的方法.分享给大家供大家参考.具体如下: using System; using System.DirectoryServices; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { DirectoryEntry rootEntr

  • C#部署数据库及IIS站点

    一.前言 最近忙里偷闲,做了一个部署数据库及IIS网站站点的WPF应用程序工具. 二.内容 此工具的目的是: 根据.sql文件在本机上部署数据库 在本机部署IIS站点,包括新建站点,新建应用程序池.只新建而不会对本机上原有的程序池或站点做修改操作 最终样式:(Check按钮的作用是防止与本机已有的站点或程序池有冲突) View: <Window x:Class="AutoWebTool.MainWindow" xmlns="http://schemas.microsof

  • C#开发windows服务实现自动从FTP服务器下载文件

    最近在做一个每天定点从FTP自动下载节目.xml并更新到数据库的功能.首先想到用 FileSystemWatcher来监控下载到某个目录中的文件是否发生改变,如果改变就执行相应的操作,然后用timer来设置隔多长时间来下载.后来又想想,用windwos服务来实现. 效果图: 执行的Log日志: INFO-2016/5/24 0:30:07--日志内容为:0/30/7进行time触发 INFO-2016/5/24 1:30:07--日志内容为:1/30/7进行time触发 INFO-2016/5/

  • FtpHelper实现ftp服务器文件读写操作(C#)

    最近做了一个项目,需要读取ftp服务器上的文件,于是参考了网上提供的一些帮组方法,使用过程中,出现一些小细节问题,于是本人做了一些修改,拿来分享一下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; using System.Threading; using System.Configuration; na

  • C# WebService发布以及IIS发布

    首先我们要做的就是先把IIS(Internet信息服务)打开,我用的是win8 的系统,所以这里以win8系统的操作来讲 一.IIS的一些事先操作 1.打开控制面板,然后进入程序 2.进入程序以后我们找到 启用或关闭Windows功能 3.进入以后把  Internet信息服务  的都选上,单击"确定" 上述的步骤好了以后我们退回到控制面板  ,找到   系统和安全 里面的  管理工具     点击"管理工具"    ,第一个就是我们的IIS了,双击打开它 我们会弹

  • c# 在windows中操作IIS设置FTP服务器的示例

    什么是FTP FTP(File Transfer Protocol)是TCP/IP网络上两台计算机传送文件的协议,使得主机间可以共享文件.可以将 Internet 信息服务 (IIS) 配置为作为 FTP 服务器来运行. 这样,其他计算机便可以连接到服务器并将文件复制到服务器或者从服务器复制文件. 例如,如果您在自己的计算机上承载网站,并且希望允许远程用户连接到您的计算机并将他们的文件复制到服务器,则可以将 IIS 配置为充当 FTP 服务器. 主要实现方式 下面主要讲解一下,在Window的I

  • IIS 架设FTP服务器图文教程

    在企业中,对于一些大文件的共享,通常采用FTP这种形式来完成,并且由于FTP能消除操作系统之间的差异,对于不同的操作系统之间共享文件的作用就显得尤为突出. 一.FTP服务器的工作方式 FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式.其中PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路.当需要传送数据时,服务器从20端口向客户端的空闲端口发送连接请求,建立一条数据链路来传送数据.而PASV(被动

  • 在服务器中用IIS建立FTP服务器的图文方法

    第一步:通过任务栏的"开始->所有程序->管理工具",再其下找到Internet信息服务(IIS)管理器,打开管理器后会发现在最下方有一个"FTP站点"的选项,我们就是通过它来建立FTP服务器.(如下图) 第二步:默认情况下FTP站点有一个默认FTP站点,我们只要把资源放到系统目录下的inetpub目录中的FTPROOT文件夹即可.例如系统在F盘,只要将分享的资源放到f:\inetpub\ftproot目录中就可以了,用户登录默认FTP站点时将会看到放到

  • WIN10使用IIS部署ftp服务器详细教程

    WIN10使用IIS部署ftp服务器,供大家参考,具体内容如下 1.打开控制面板→点击卸载程序 2.点击 启用或关闭Windows功能 3.找到Internet Information Services 勾选FTP服务器和Web管理工具 (如果不勾选Web管理工具,则不会没有IIS管理工具) 4.点击确定,等待系统搜索下载需要的文件完成后重启电脑 5.重启完成后打开控制面板,进入系统与安全 6.点击管理工具 7.双击IIS管理器进入管理界面 8.点击网站→右键→添加ftp站点 9.添加站点名称和

  • Windows Server 2019 WEB和FTP服务器的配置方法

    Windows Server 2019 WEB和FTP服务器配置 1:添加新角色:WEB.FTP服务 步骤2:添加网站 步骤3:访问网站进行测试 步骤4:添加FTP站点 步骤5:添加FTP站点测试 完成! 到此这篇关于Windows Server 2019 WEB和FTP服务器的配置方法的文章就介绍到这了,更多相关win2019 WEB和FTP服务器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

  • Windows中IIS内FTP服务器高级配置图文教程

    提到FTP服务器,可能大家都会想到Serv-U.vs-FTP等软件,其实微软内置在IIS里的FTP服务已经够用,不信请往下看. 实现对多用户的管理 首先需要取消"站点属性/允许匿名连接",如图1. 接着进入"计算机管理/本地用户和组",新建立一个组,这里建立为FTPuser,然后新建立一个用户FTP01,然后修改FTP01的属性,把它加入FTPuser组,去掉系统默认的users组.在NTFS格式分区下(这里为d盘)创建文件夹FTP01和FTP02,然后设置安全权限

  • Windows中IIS内FTP服务器高级配置

    提到FTP服务器,可能大家都会想到Serv-U.vs-FTP等软件,其实微软内置在IIS里的FTP服务已经够用,不信请往下看. 实现对多用户的管理 首先需要取消"站点属性/允许匿名连接",如图1. 接着进入"计算机管理/本地用户和组",新建立一个组,这里建立为FTPuser,然后新建立一个用户FTP01,然后修改FTP01的属性,把它加入FTPuser组,去掉系统默认的users组.在NTFS格式分区下(这里为d盘)创建文件夹FTP01和FTP02,然后设置安全权限

  • Windows 2012 安装IIS和FTP的方法

    相信微软的Windows Server 2012,对部分用户而言都是崭新的面孔,而关于其在服务器上应用的专业技术文档更是少之又少. 护卫神经过整理,逐步将新技术授予广大用户,希望对大家的发展添砖加瓦--言归正传,当前使用的是Windows Server 2012 R2/NT6.3/IIS8.5 1.打开Windows 2012的服务器管理器,选择 管理→添加角色和功能 2.进入 添加角色和功能向导,选择 "Web服务器(IIS)" 3.根据情况选择对应功能,这里选择.Net3.5 4.

  • IIS搭建ftp服务器的详细教程

    IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务.最初是Windows NT版本的可选包,随后内置在Windows 2000.Windows XP Professional和Windows Server 2003一起发行,但在Windows XP Home版本上并没有IIS.IIS是一种Web(网页)服务组件,其中包括Web服务器.FTP服务器.NNTP服务器和SMTP服务器

随机推荐