Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 要将文件从WCF保存到IIS虚拟目录?_C#_Wcf_Visual Studio 2008_Iis - Fatal编程技术网

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

C# 要将文件从WCF保存到IIS虚拟目录?,c#,wcf,visual-studio-2008,iis,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.

我正在应用程序中使用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格式不受支持。请用正确的方式引导我。我真的很感谢你的帮助。我正在使用VS200获取物理目录名,请使用

Server.MapPath('TempFolder/UserID1');
更新

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

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

例如,假设DLL位于bin目录中,而temp目录为1级以上,则以下代码应该可以工作:

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

如果您的windows服务位于同一台IIS主机服务器上,则在接收文件时,您可以在WCF windowsservice中使用绝对路径,例如如果映射到c:/TempFolder/,在c:/TempFolder/中创建新文件夹并将文件存储在该位置,如果它位于不同的计算机上,则可以创建网络共享,然后创建文件夹并将文件复制到该位置

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


这将为当前应用程序提供一个虚拟目录。使用此目录,您可以附加您创建的文件夹名称

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

您好,谢谢您的回答。您能给我举个例子吗?我不知道如何在wcf应用程序中使用它。我已经尝试了HttpContext.Current.Server.MapPath(“TempFolder”)但它总是返回null。我认为它只能在基于web的应用程序中使用。这只有在IIS和ASP.Net兼容模式下的主机是可用的情况下才能工作enabled@chris.house.00:非常好。我太习惯WCF/Web应用组合解决方案了。我用不同的解决方案更新了答案。谢谢你的敏锐眼光。你的帖子有点矛盾。您声明您的服务作为Windows服务托管,但您引用的是IIS虚拟目录。如果您的服务确实作为Windows服务托管,那么为什么要尝试使用IIS虚拟目录?造成这些错误的代码是什么样子的?@Chong如果你得到了这个问题的解决方案,请你分享代码或链接,我可以从中得到答案。我不理解Brijesh的说法。因此,如果可以的话,请帮助我,我也陷入了同样的境地,在我的案例中使用webHttpBinding。。先谢谢你。。。