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