2011-12-28 45 views
2

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

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

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

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

+0

你的帖子有些矛盾。您声明您的服务托管为Windows服务,但您指的是IIS虚拟目录。如果您的服务确实作为Windows服务托管,那么您为什么要尝试使用IIS虚拟目录?代码是什么造成这些错误? – 2011-12-28 04:38:14

+0

@Chong如果你得到这个解决方案,你会分享代码或链接,我可以得到答案的行为,我不明白Brijesh告诉的方式。 所以请帮助,如果你可以我卡在相同的情况下,并在我的情况下使用webHttpBinding .. 在此先感谢... – 2012-10-02 11:16:05

回答

2

如果您的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/

0

要获得物理目录名称,使用

Server.MapPath('TempFolder/UserID1'); 

更新

正如在评论中指出,上述方案将只使用asp.net兼容工作时一个IIS托管的解决方案。

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

例如,假设DLL是在bin目录和临时目录是1点了,下面的代码应该工作:

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

嗨Competent_tech, 谢谢你的答案。你可以给我一些例子吗?我不知道如何在wcf应用程序中使用它。我已经尝试了HttpContext.Current.Server.MapPath(“TempFolder”),但它总是返回null。我认为它只能在基于Web的应用程序中使用。 – Chong 2011-12-28 04:34:15

+2

只有在IIS和ASP中托管时才能工作。网络兼容性模式启用 – 2011-12-28 04:35:13

+0

@ chris.house.00:优点。我习惯于组合WCF/Web应用程序解决方案。我已经用不同的解决方案更新了答案。感谢锐利的眼睛。 – 2011-12-28 09:34:24

0

这会给当前application.With的虚拟目录,这个你可以添加你创建的文件夹名称

上传文件
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; 
    }