Сохранить файлы в виртуальный каталог IIS из WCF? - PullRequest
2 голосов
/ 28 декабря 2011

Я использую сервис WCF в своем приложении. Все сервисы размещаются как оконные сервисы.У меня есть один виртуальный каталог в IIS для сохранения файла пользователя (может быть PDF или TXT).Я хочу создать определенную папку для каждого пользователя и сохранить его информационный файл в этой папке.Как я могу создать папку и загрузить файл в IIS через WCF?

Например: путь к виртуальному каталогу 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

Ответы [ 3 ]

2 голосов
/ 28 декабря 2011

Если ваша служба Windows находится на том же хост-сервере IIS, вы очень хорошо можете использовать абсолютный путь, скажем, если http://10.10.10.1/TempFolder/ отображается в c: / TempFolder /, в WindowsFservice WindowsF при получении файла создайте новую папку в c:/ TempFolder / и сохраните файл там, и если он находится на другом компьютере, вы можете создать общий сетевой ресурс, а затем создать папку и скопировать файлы в это место.

В Интернете можно найти много статей, демонстрирующих, как загрузить файл черезwcf

http://stefanoricciardi.com/2009/08/28/file-transfer-with-wcp/

0 голосов
/ 28 декабря 2011

Это даст виртуальный каталог текущего приложения. При этом вы можете добавить имя созданной папки

    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;
    }
0 голосов
/ 28 декабря 2011

Чтобы получить физическое имя каталога, используйте

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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...