要从WCF将文件保存到IIS虚拟目录?

时间:2011-12-28 04:11:17

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

我在我的应用程序中使用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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

Server.MapPath('TempFolder/UserID1');

<强>更新

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

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

例如,假设DLL位于bin目录中且临时目录为1级,则以下代码应该有效:

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

答案 2 :(得分:0)

这将提供当前应用程序的虚拟目录。这样您就可以附加创建的文件夹名称

    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;
    }