Вопрос

У меня есть 2 контракта (CA & CB), реализованные одной службой WCF с 2 конечными точками (EPA & EPB).

Это нет В целях безопасности, но чисто по соображениям ясности / организации, я хотел бы только «видеть« операции контракта, когда я обнаружил услугу через EndPointa; И также видят только операции Creductb с помощью EndPointB.

Мне не нужно «защищать» эти операции сами. Сценарий такой, что у любого данного клиента нужна только одна «сторона» службы, никогда не оба (но, а сами операции не имеют ресурсов, поэтому имеет смысл иметь единое служение, а не 2 службы).

Похоже, что любой данный сервис в основном получает 1 WSDL, ERGO все операции подвергаются воздействию всех конечных точек. Это то, как он работает, или есть ли способ «формировать» конечную точку, окклюдирующие операции, не определенные контрактом конечных точек?

Это было полезно?

Решение

По умолчанию вы правы - один класс внедрения услуг получает один WSDL, который содержит все методы обслуживания (от всех услуг договоров), что этот класс услуг реализует.

Нет никаких способов (насколько я знаю), чтобы «формировать» WSDL в любом (простом) пути - WCF предлагает способы попасть в процесс создания WSDL (статически или динамически), но те, которые не для слабость сердца. Для вас было бы намного проще просто разделить реализацию контрактов на обслуживание на два отдельных класса, а затем у вас будут два отдельных службы, отдельные WSDL и все.

Другие советы

Марк абсолютно прав. Я просто добавляю, почему это происходит в WCF. В WCF все связанные с метаданными функциональность основаны вокруг поведения метаданных сервисов и конечной точкой MEX. Оба эти функции определяются на уровне обслуживания. Таким образом, вы не можете взять более высокую грануацию (если вы не напишите много пользовательского кода) и укажите метаданные на конечную точку.

WCF Service (Class) непосредственно сопоставлен на WSDL: Element Element, который предоставляет каждый контракт в качестве отдельного WSDL: Port (в WCF, известном как конечная точка). Это главный момент ответа на ваш вопрос. Если вы не хотите, чтобы ваш второй договор в этом WSDL: сервис, вы не можете реализовать его в одном классе.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top