Добавление параметра в файл WCF .svc - PullRequest
2 голосов
/ 15 марта 2011

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

У меня есть стандартный веб-сервис регистрации ошибок, который я вызываю из разных приложений. Я хотел бы иметь возможность вызывать службу с разными именами, чтобы служба знала, как она была вызвана, и записывать в разные файлы. Например, приложение будет вызывать Warning.svc, Serious.svc или Critical.svc и, в зависимости от того, что вызывается, записать сообщение в соответствующий файл.

Так что я решил добавить параметр в файл .svc, сообщающий WCF, как он был вызван. Если нет, то есть ли способ получить имя файла SVC из моего кода?

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

Ответы [ 2 ]

3 голосов
/ 15 марта 2011

Вы можете указать пользовательский ServiceHostFactory в теге <%@ ServiceHost %> файла svc, а затем использовать атрибут службы для чего угодно.Это значение будет передано в вашу SHFactory, где вы сможете проанализировать его и запустить с ним свой ServiceHost.

Вот пример, который просто отражает поведение WCF по умолчанию:

Service1.svc:

<%@ ServiceHost Language="C#" Debug="true" Service="WcfService2.Service1" Factory="WcfService2.CustomServiceHostFactory" CodeBehind="Service1.svc.cs" %>

CustomServiceHostFactory.cs:

namespace WcfService2
{
    using System;
    using System.ServiceModel;
    using System.ServiceModel.Activation;

    public class CustomServiceHostFactory : ServiceHostFactoryBase
    {
        public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses)
        {
            var host = new ServiceHost(Type.GetType(constructorString), baseAddresses);
            host.AddDefaultEndpoints();
            return host;
        }
    }
}
1 голос
/ 15 марта 2011

Я не думаю, что вы можете сделать это в файле .svc.

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

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

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