Базовый HTTP-сервис с IIS, но без WCF - PullRequest
1 голос
/ 14 января 2011

Я ищу способ размещения очень простой, но высокопроизводительной службы HTTP, которая интегрируется с IIS с использованием .Net.

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

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

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

Другая причина заключается в том, чтомы идем в направлении независимости от платформы и хотим, чтобы в будущем мы могли легко заменить IIS на Apache.

Спасибо!

1 Ответ

2 голосов
/ 14 января 2011

Я думаю, что вы все еще можете использовать WCF для своих услуг.С точки зрения хостинга вне IIS у вас есть варианты:

http://msdn.microsoft.com/en-us/library/ms730158.aspx

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

[Edit] Вам не нужно «указывать» каждую конечную точку для WCF.если вы знаете адрес во время выполнения, просто передайте его в код, который создает ваш прокси-сервер службы.Взгляните на класс ChannelFactory, вы можете передать ему привязку (которую вы также можете получить из config или bulid во время выполнения) и конечную точку (конечная точка создается очень просто путем предоставления адреса), вот пример метода, который будетсоздайте сервисный прокси типа T. В приведенном ниже примере адрес конечной точки исходит от .config, но вы можете передать его из любого места в вашем коде.

    /// <summary>
    /// Creates a service proxy from a binding name and address
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public static T Create<T>()
    {
        string endpoint = ConfigurationManager.AppSettings["FactoryEndPointAddress"];
        string bindingname = ConfigurationManager.AppSettings["FactoryBindingName"];
        var address = new EndpointAddress(endpoint);
        var factory = new ChannelFactory<T>(GetBinding(bindingname), address);
        return factory.CreateChannel(address);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...