2010-09-08 4 views
5

У меня есть служба wcf, которая предоставляет довольно большое количество методов обслуживания на одном адресе конечной точки. До сих пор все методы обслуживания реализованы в одном классе контрактных услуг. Этот класс контрактных услуг реализует несколько интерфейсов контракта на обслуживание. Теперь я хотел бы разделить реализацию методов контракта на обслуживание на несколько классов, чтобы избежать роста класса контракта. Я использую сценарий самостоятельного хостинга с ServiceHost. ServiceHost просто берет тип одного типа, реализующего методы службы, поэтому кажется, что все должно быть реализовано в этом классе. Разумеется, плоть методов можно разделить на несколько классов. Но есть ли способ разделить методы на несколько классов?WCF Большой интерфейс с одним адресом конечной точки

ответ

5

Вы можете реализовать службу как partial class, которая позволяет разделить реализацию на несколько файлов.

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

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

+0

Благодарим вас за ответ. Я также думал о частичных классах, но, на мой взгляд, частичные классы не помогают упростить решение. Я поеду, как вы предложили, используя один лайнер для каждой операции. – WalterOesch

0

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

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

С другой стороны, вызывающий клиент должен знать, какую службу использовать при вызове функции.

0

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

Теперь вы хотите разделить класс реализации службы на несколько реализаций служб. Каждая реализация службы реализует один (или меньший набор) контрактов на обслуживание. Это потребует изменения вашего хостинга - вам потребуется отдельный ServiceHost для каждой реализации службы. Вам также потребуется отдельная конфигурация и уникальный адрес для каждой реализации службы.

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

+0

Благодарим вас за ответ. В настоящее время я планирую и внедряю интерфейс обмена данными для довольно большой системы. Клиенты, скорее всего, всегда будут использовать весь интерфейс, который может работать на разных платформах. В таком szenario я считаю, что для клиента проще всего иметь только один адрес конечной точки. Я создал несколько интерфейсов контракта на обслуживание и позволил «Мастер-интерфейсу» наследовать от всех интерфейсов контрактного обслуживания. Затем класс контракта servcice реализует мастер-интерфейс. – WalterOesch