Формировать службу WCF по конечной точке - PullRequest
1 голос
/ 02 октября 2010

У меня есть 2 контракта (cA & cB), реализованных одной службой WCF с 2 конечными точками (epA и epB).

Это , а не в целях безопасности, но исключительно по причинамдля ясности / организации, я бы хотел "видеть" операции ContractA только тогда, когда я обнаружил услугу через конечную точку A;и аналогично, смотрите только операции ContractB через конечную точку B.

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

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

Ответы [ 2 ]

1 голос
/ 03 октября 2010

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

Служба WCF (класс) напрямую сопоставляется с элементом wsdl: service, который представляет каждый контракт как отдельный wsdl: порт (в WCF известен как конечная точка).Это главное, что нужно ответить на ваш вопрос.Если вам не нужен ваш второй контракт в этом wsdl: service, вы не можете реализовать его в том же классе.

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

1 голос
/ 03 октября 2010

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

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

...