2010-05-12 103 views
0

我想要创建WCF操作合约,它会消耗一个字符串,生成一个公共网页,然后返回此新页面的地址。使用WCF服务创建新网页

[ServiceContract(Namespace = "")] 
public class DatabaseService 
{ 
    [OperationContract] 
    public string BuildPage(string fileName, string html) 
    { 

     //writes html to file 
     //returns public file url 

    } 
} 

这似乎不应该是复杂的,但我无法弄清楚如何做到这一点。到目前为止,我试过的是这样的:

[OperationContract] 
public string PrintToFile(string name, string text) 
{ 
    FileInfo f = new FileInfo(name); 
    StreamWriter w = f.AppendText(); 
    w.Write(text); 
    w.Close(); 
    return f.Directory.ToString(); 
} 

这是问题所在。这不会在Web根目录中创建文件,它会在运行webdav服务器的目录中创建它。当我在IIS服务器上运行它时,它似乎什么也不做(至少我不知道)。 如何以编程方式获得Webroot的句柄,以便我可以将结果文件放在那里,然后返回公共URL?我可以在没有问题的情况下处理域名,所以如果它只返回文件的相对路径,那很好。

感谢, 布赖恩

+3

你确实意识到这是一个巨大的,巨大的安全漏洞,对吧?正如所写,这允许用户将任何文件和任何内容上传到任何位置。包括非法内容,脚本,ASPX页面甚至可执行文件。 – Aaronaught 2010-05-12 21:35:58

+0

在这里找到了一些相关的讨论: http://stackoverflow.com/questions/791468/how-to-get-working-path-of-a-wcf-application 用于获取web根目录的代码是: string apPath = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath; 仍然需要弄清楚如何将它变成一个url ... – 2010-05-12 21:47:26

+0

@Aaronaught我甚至没有考虑过!好点子!实际上,我可能不会从客户端传递html,我会传入一个对象(由我的客户端应用程序创建)并使用它在服务器端创建html。另外,我认为在实际生成html之前,如果不是更强大的认证类型,那么添加密码会非常容易。感谢您的输入。 – 2010-05-12 21:51:05

回答

0

为什么你需要以编程方式确定路径,你不知道吗?你不能把它放在一个配置文件中,并从那里读取它?

+0

我想我可以但不是。该应用程序旨在部署在各种地方,任何减少需要由我更改的配置文件的数量都非常棒。 – 2010-05-12 22:38:57