【问题标题】:To save files to IIS virtual directory from WCF?要将文件从 WCF 保存到 IIS 虚拟目录?
【发布时间】:2012-08-14 10:20:30
【问题描述】:

我在我的应用程序中使用 WCF 服务。所有服务都作为窗口服务托管。我在 IIS 中有一个虚拟目录来保存用户文件(可能是 PDF 或 TXT)。我想为每个用户创建一个特定的文件夹并将他们的信息文件保存在该文件夹中。如何通过 WCF 创建文件夹并将文件上传到 IIS?

例如:虚拟目录路径为http://10.10.10.1/TempUserFolder/

我想为UserID = 1 创建一个文件夹,例如http://10.10.10.1/TempFolder/UserID1/。 然后将他的信息文件保存到那个文件夹,http://10.10.10.1/TempFolder/UserID1/Info.pdf

我在使用System.IO 时收到错误消息URI formats are not supported。请以正确的方式指导我。我真的很感谢你的帮助。我正在使用 VS200

【问题讨论】:

  • 你的帖子有点矛盾。您声明您的服务作为 Windows 服务托管,但您指的是 IIS 虚拟目录。如果您的服务确实作为 Windows 服务托管,那么您为什么要尝试使用 IIS 虚拟目录?导致这些错误的代码是什么样的?
  • @Chong 如果您得到解决方案,请分享代码或链接,我可以在其中获得答案行为我不明白 Brijesh 所说的方式。所以如果你能帮助我在同样的情况下并在我的情况下使用 webHttpBinding.. 提前谢谢......

标签: c# wcf visual-studio-2008 iis


【解决方案1】:

如果你的 windows 服务在同一个 IIS 主机服务器上,你可以很好地使用绝对路径,比如 http://10.10.10.1/TempFolder/ 映射到 c:/TempFolder/,在 WCF windowsservice 中接收文件时在 c:/TempFolder/ 中创建新文件夹并将文件存储在那里,如果它在不同的机器上,您可以创建网络共享,然后创建文件夹并将文件复制到该位置。

你可以在网上找到很多文章来演示如何通过 wcf 上传文件

http://stefanoricciardi.com/2009/08/28/file-transfer-with-wcp/

【讨论】:

    【解决方案2】:

    这将给出当前应用程序的虚拟目录。有了它,您可以附加您创建的文件夹名称

        public string GetIISPath()
        {
            string urlscheme = System.Web.HttpContext.Current.Request.Url.Scheme;
            string host = System.Web.HttpContext.Current.Request.Url.Host;
            int port = System.Web.HttpContext.Current.Request.Url.Port;         
    
            //Ignore Http Port
            if (port != 80)
                host = host + ":" + port;
            string vPath = urlscheme + "://" + host + "/";
            return vPath;
        }
    

    【讨论】:

      【解决方案3】:

      要获取物理目录名称,请使用

      Server.MapPath('TempFolder/UserID1');
      

      更新

      正如 cmets 中所指出的,上述解决方案仅在 IIS 托管解决方案中使用 asp.net 兼容性时才有效。

      如果您不想对目录进行硬编码,例如如果将其部署到不同的服务器,则可以获取 WCF 程序集的目录,然后从中找出所需目录的相对关系。

      例如,假设 DLL 在 bin 目录中并且 temp 目录是上一级的,下面的代码应该可以工作:

      string sDirectory = System.Reflection.Assembly.GetExecutingAssembly.Location;
      sDirectory = System.IO.Path.Combine(sDirectory, "..\TempFolder\UserID1");
      

      【讨论】:

      • 嗨 Competent_tech,谢谢你的回答。你能给我一些例子吗?我不知道我如何在 wcf 应用程序中使用它。我已经尝试过 HttpContext.Current.Server.MapPath("TempFolder" ) 但它总是返回 null。我认为它只能在基于 Web 的应用程序中使用。
      • 只有在启用 IIS 和 ASP.Net 兼容模式的情况下才有效
      • @chris.house.00:很好。我太习惯于组合 WCF/Web 应用程序解决方案。我已经用不同的解决方案更新了答案。感谢您的敏锐眼光。
      猜你喜欢
      • 2011-07-19
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      相关资源
      最近更新 更多