Создать многоразовую заглушку для нескольких веб-сервисов (ASMX) - PullRequest
1 голос
/ 23 декабря 2009

У меня есть несколько сайтов, размещенных в разных местах, которые я хочу регулярно резервировать.

Однако мне нужны только загруженные пользователем файлы, поэтому я создал простой веб-сервис на каждом сайте с таким же определением:

public class BackupService : System.Web.Services.WebService
{
    [WebMethod]
    public string[] GetFileList()
    {
        // Get list from DB
    }
}

Пространство имен, очевидно, отличается, однако я думаю, что для этого должна быть возможность использовать одну заглушку и просто вызывать эту заглушку с разными URL.

Проблема в том, что я не могу найти никаких примеров того, как это сделать, поэтому либо это невозможно (в чем я сомневаюсь, пока не доказал свою неправоту), либо я просто отстой в поиске.

Может кто-нибудь придумать, как это сделать?

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

Я надеюсь, что с веб-сервисами можно сделать то же самое, поэтому я могу просто добавить URL-адрес ASMX в мой XML-файл и, таким образом, избежать перекомпиляции.

Ответы [ 2 ]

2 голосов
/ 23 декабря 2009

Так в чем же проблема с развертыванием этой веб-службы в различных размещенных (и разных физических местах) и изменением URL-адреса конечной точки веб-службы в вашем клиенте SOAP из вашего вызывающего кода?

Или я упускаю суть вашего вопроса?

Хорошо, прочитав ваш комментарий, вот еще несколько указателей.

Все, что делает Add Web Reference, это генерирует прокси-клиента SOAP в вашем файле Reference.cs. Поскольку контракт для них один и тот же, вам нужно сделать это только один раз.

Затем, если вы задали использование клиентского прокси-сервера SOAP в коде вызова, установите для URL-адреса соответствующую конечную точку .asmx (загрузите ее из пользовательской конфигурации XML или web.config):

YourWebServiceClient client = new YourWebServiceClient();
client.Url = "http://server/webservice/yourendpoint.asmx"; // get from config
string[] filenames = client.GetFileList();

Это все, что тебе нужно сделать. Надеюсь, это поможет.

Также - убедитесь, что для разных веб-сервисов вы не меняете пространство имен веб-сервиса. Держите это так же. Может оказаться более удобным использовать пространство имен URN, а не URI, так как соблазнительно изменить пространство имен с URI, чтобы оно соответствовало URL-адресу веб-службы, однако в этом нет необходимости.

Так, например, пометьте свой веб-сервис, используя пространство имен URN:

[WebService(Namespace = "urn:your:mywebservice")]

И разверните тот же веб-сервис в различных местах.

0 голосов
/ 23 декабря 2009

В качестве альтернативы у вас может быть статический класс с логикой, которую использует веб-служба, и вызывать его в каждом:

открытый класс BackupService: System.Web.Services.WebService { [WebMethod] открытая строка [] GetFileList () { return BackupHelper.GetFileList (); } }

открытый статический класс BackupHelper { открытая строка [] GetFileList () {..} }

...