2010-05-12 9 views
0

Je voudrais créer un contrat d'opération WCF qui consomme une chaîne, produit une page Web publique, puis retourne l'adresse de cette nouvelle page. Cela ne semble pas être compliqué, mais je n'arrive pas à comprendre comment le faire. Jusqu'ici ce que j'ai essayé est ceci:Créer une nouvelle page Web en utilisant un service WCF

[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(); 
} 

Voici le problème. Cela ne crée pas de fichier dans la racine web, il le crée dans le répertoire où le serveur webdav est en cours d'exécution. Quand je lance ceci sur un serveur IIS il semble ne rien faire du tout (du moins pas que je peux dire). Comment puis-je obtenir un handle pour le webroot par programme afin que je puisse y placer le fichier résultant et retourner l'URL publique? Je peux coller sur le nom de domaine après le fait sans problème, donc si cela ne renvoie que le chemin relatif vers le fichier, c'est bien.

Merci, brian

+3

Vous vous rendez compte que c'est un trou de sécurité énorme, béante, non? Comme écrit, cela permet à l'utilisateur de télécharger n'importe quel fichier, avec n'importe quel contenu, à n'importe quel endroit. Y compris contenu illégal, scripts, pages ASPX ou même exécutables. – Aaronaught

+0

trouvé une discussion à ce sujet ici: http://stackoverflow.com/questions/791468/how-to-get-working-path-of-a-wcf-application Le code utilisé pour obtenir la racine web est: chaîne apPath = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath; Encore faut-il savoir comment le transformer en une url ... –

+0

@Aaronaught i avait même pas considéré que! Bon point! En réalité, je ne vais probablement pas passer le html du côté client, je vais probablement passer un objet (créé par mon application cliente) et l'utiliser pour créer le html côté serveur. De plus, je pense qu'il serait assez facile d'ajouter un mot de passe si ce n'est un type d'authentification plus fort avant de générer le code HTML. Merci pour la contribution si. –

Répondre

0

Pourquoi avez-vous besoin de déterminer programatically le chemin, ne savez-vous pas ce? Ne pouvez-vous pas le mettre dans un fichier de configuration et le lire à partir de là?

+0

Je suppose que je pourrais mais id plutôt pas. L'application est destinée à être déployée dans une variété d'endroits et tout ce qui réduit la quantité de fichiers de configuration qui doivent être modifiés par moi est assez impressionnant. –

Questions connexes