Программная настройка отдельных операций WCF с различными конфигурациями WCF - PullRequest
0 голосов
/ 16 января 2009

Я только начинаю работать с WCF и хотел бы настроить распределенную сетевую систему следующим образом: (но не уверен, если это возможно.)

У меня есть клиент .net с бизнес-логикой. Для этого потребуются различные данные из разных источников, поэтому я хотел бы добавить «сервер», который содержит кэш в памяти, а также возможности WCF для отправки / получения и публикации / подписки из источников данных для данных, которые не кэшируются. Я думаю, что эти серверные приложения должны быть идентичными с точки зрения кода, но с высокой степенью конфигурирования, чтобы запросы могли обрабатываться как одноранговые, или как традиционные клиент-серверы по мере необходимости. Я думаю , что это можно сделать так, чтобы сервер отправлял запрос туда, где ему настроили конечную точку, и получал ответ.

По сути, сервер будет настроен, как показано ниже:

Server A
========

Operation 1 - Endpoint I
Operation 2 - Endpoint II


Server B
========

Operation 1 - Endpoint IV
Operation 2 - Endpoint III

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

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

Пожалуйста, дайте мне знать, если я не объяснил себя ясно.

Заранее спасибо за любую помощь, Будет

Ответы [ 3 ]

1 голос
/ 18 января 2009

Насколько я знаю, вы не можете указать конфигурацию для каждой операции. Самый низкий уровень - это уровень интерфейса. Самым простым (безобразным) решением было бы поместить каждую операцию в отдельный интерфейс.

1 голос
/ 17 января 2009

Я не знаю, даст ли это именно то, что вы ищете, но я использую это для добавления моих конечных точек WCF в мою службу Windows. Это код, который служба запускает для загрузки всех служб wcf:

IDictionary<string, ServiceHost> hosts;
NetTcpBinding binding;
CustomBinding mexBinding;

private void AddService(Type serviceImp, Type serviceDef, string serviceName)
    {
        ServiceHost host = new ServiceHost(serviceImp);

        string address = String.Format(baseAddress, wcfPort, serviceName); 

        string endAdd = address;
        string mexAdd = address + "/mex";

        ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
        host.Description.Behaviors.Add(behavior);
        host.AddServiceEndpoint(serviceDef, binding, endAdd);
        host.AddServiceEndpoint(typeof(IMetadataExchange), mexBinding, mexAdd);

        host.Open();

        hosts.Add(serviceDef.Name, host);
    }

Есть строка baseAddress, в которую я не копировал, но у нее просто есть адрес net.tcp для конечной точки. Аналогично для wcfPort. Различные базы и адреса используются для отладки, тестирования и производства.

На всякий случай, если неясно, serviceImp - это реализация сервиса, а serviceDef - интерфейс, определяющий контракт. Надеюсь, это поможет.

РЕДАКТИРОВАТЬ - Вот некоторые ссылки, которые я использовал, чтобы помочь мне разобраться во всем этом:

Создание узла службы WCF программным способом
Пример совместного использования порта Net.Tcp, часть 2
Станция технического обслуживания: адресация WCF в глубину

0 голосов
/ 24 февраля 2011

Помещение каждой операции в отдельный интерфейс является правильным и хорошим подходом к проектированию. Уровень запросов / ответов Агаты следует этому подходу. Посмотрите на это, и это очень полезно и расширяемо

http://code.google.com/p/agatha-rrsl/

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