Веб-сервис и настройка - PullRequest
       25

Веб-сервис и настройка

0 голосов
/ 09 февраля 2009

Я создал WebService с использованием платформы .NET 2.0, класса, основанного на интерфейсе с атрибутом WebServiceAttribute и размещающего его с использованием IIS и файла ASMX. В настоящее время WebService загружает свою конфигурацию из одного файла XML.

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

Копируя файл ASMX, я могу создать клон веб-сервиса под другим именем, который будет основан на точно такой же реализации. Но он также загружает тот же самый файл конфигурации, что делает его довольно бесполезным.

Итак, мой вопрос: Каков наилучший способ создания произвольного числа веб-сервисов, основанных на одном классе, в одном виртуальном каталоге IIS, где каждый загружает свой файл конфигурации? * Решение С помощью ответа Павла Чучува я создал следующий код для обработки загрузки конфигурации:

public class WebConfigManager
{
    public static T Load<T>() where T: new()
    {
        string location = 
            HttpContext.Current.Request.PhysicalPath + ".config";

        if (HttpContext.Current.Cache[location] is T)
        {
            return (T)HttpContext.Current.Cache[location];
        }

        using (Stream s = 
            new FileStream(location, FileMode.Open, FileAccess.Read))
        {                
            return (T)(HttpContext.Current.Cache[location] = 
                new XmlSerializer(typeof(T)).Deserialize(s));                
        }
    }
}

// example of the usage of WebConfigManager
public class MyWebService : IMyWebService 
{
    Config config = WebConfigManager.Load<Config>();
...

Ответы [ 2 ]

1 голос
/ 09 февраля 2009

Скопируйте и вставьте файл .asmx для создания нескольких экземпляров веб-службы (например, Service1.asmx, Service2.asmx и т. Д.).

Загрузить файл конфигурации на основе значения Context.Request.FilePath:

public string LoadConfig()
{
   string configPath = Server.MapPath(this.Context.Request.FilePath + ".xml");
   using (XmlReader reader = XmlReader.Create(configPath))
   {
      // Will read Service1.asmx.xml, Service2.asmx.xml and so on
   }
}
1 голос
/ 09 февраля 2009

Я предлагаю разместить asmx в разных папках и поместить web.config в каждую из этих папок с настройкой для этого конкретного экземпляра веб-службы. Это простой и быстрый способ

OR

вы можете использовать Web Service Enhancements 3.0 и создать маршрутизатор WSE, перенаправить вызовы к ASMX на этот маршрутизатор и позволить маршрутизатору переадресовать вызов нужному экземпляру веб-службы и передать дополнительную конфигурацию. Это более сложный способ сделать это, но он позволяет вам использовать один экземпляр веб-службы, который выбирает правильную конфигурацию на основе параметров, которые маршрутизатор передает ему. Для получения дополнительной информации о WSE3.0 я указываю вам на MSDN.

Надеюсь, это поможет!

...