Доступ к полному пути к серверу для файла в веб-службе WCF - PullRequest
1 голос
/ 18 сентября 2011

У меня есть веб-сервис с svc-файлом и кодом, определяющим простой веб-сервис с использованием WCF.

Очевидно, что я размещаю веб-сервис на сервере, используя файл svc.

Моему сервису необходим доступ к файлу в каталоге веб-приложения, в котором находится веб-сервис.

Рассмотрим следующую структуру:

Web application root folder: MyWebApp

MyWebApp (folder) -> Images (folder)

MyWebApp (folder) -> App_Code (folder)

MyWebApp (folder) -> WebServices (folder)

MyWebApp (folder) -> Data (folder)

MyWebApp (folder) -> Web.config (file)

MyWebApp (folder) -> WebServices (folder) -> MyWebService.svc (file)

MyWebApp (folder) -> App_Code (folder) -> MyWebService.cs (file)

MyWebApp (folder) -> Data (folder) -> myfile.txt

Ну. Из файла csharp, находящегося за файлом веб-службы, я хотел бы получить доступ к XML-файлу, расположенному в соответствующей папке для данных.

Как мне это сделать ??? Конечно, я не могу получить доступ к объекту сервера ...

Thankyou

1 Ответ

4 голосов
/ 18 сентября 2011

Если вы пользуетесь хостингом в IIS:

var root = HostingEnvironment.ApplicationPhysicalPath;
var someFile = Path.Combine(root, "images", "test.png");

Теперь, конечно, говорится, что вы никогда не должны писать такой код в операции службы WCF.Вам нужно, чтобы эта служба приняла путь в качестве аргумента конструктора, а затем просто сконфигурировала вашу инфраструктуру внедрения зависимостей для передачи правильного значения:

public class MyService1: IMyService
{
    private readonly string _path;
    public MyService1(string path)
    {
        _path = path;
    }

    public void SomeServiceOperation()
    {
        var someFile = Path.Combine(_path, "images", "test.png");
        // TODO: do something with the file
    }
}

Теперь все, что осталось - написать пользовательский IInstanceProvider подключить вашу структуру внедрения зависимостей.Таким образом, код вашей службы больше не зависит от того, как и где находится служба.Все, что нужно этой службе, - это путь к файлу => вставить его в нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...