Вместо того, чтобы зависеть исключительно от HttpContext
в вашем веб-сервисе (обычно это не очень хорошая практика), вы должны добавить параметризованный конструктор в ваш класс WebService
. Затем в конструкторе по умолчанию без параметров вы можете проверить HttpContext
на те же зависимости.
Таким образом, когда вам нужно вызвать веб-сервис из той же сборки, вы можете делиться зависимостями внутри процесса, а не полагаться на HttpContext
.
В этом случае ваша зависимость - Server.MapPath
, которая отображает относительный путь в URL-адресе на физический путь на жестком диске. Вместо этого вы можете настроить свой веб-сервис так, чтобы он принимал определенный путь или базовый путь, и, если он не указан, используйте Server.MapPath
, чтобы найти его.
Или вы можете создать интерфейсную абстракцию, скажем IPathMapper
, с одной реализацией, которая обертывает Server.MapPath
, а другую - просто с физическим путем, и использовать вторую из той же сборки.
Я бы действительно рекомендовал это вместо добавления веб-ссылки из сборки вашего веб-сервиса; последнее значительно ухудшит производительность , не говоря уже об усложнении обслуживания приложения-службы.