Несколько конечных точек WCF и IServices

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

Я работал над видео на msdn, и теперь я блуждаю по способу настройки службы WCF. Сценарий: если у меня есть несколько IServices, например. так что у меня есть IThis и IThat, и клиенту нужен доступ к обоим (примечание: они будут использовать net.tcp),

  • IThis обрабатывает запросы к базе данных и,

  • IThat обрабатывает вычисления независимо от базы данных,

Я предполагаю, что мне нужно определить отдельные конечные точки для IThis и IThat, на которые клиент ссылается отдельно. Или я должен создать общую службу IThisAndThat, на которую ссылается клиент и которая содержит функциональные возможности для обоих?

Или это другие способы разработки и обработки служб WCF с несколькими службами IServices? Пока я спрашиваю, можете ли вы определить базовый адрес для tcp или только для http?

~ Спасибо всем, любая помощь или указатели были бы замечательными.


person Heinrich    schedule 30.05.2011    source источник


Ответы (2)


Я предполагаю, что мне нужно определить отдельные конечные точки для IThis и IThat, на которые клиент ссылается отдельно. Или мне создать общую службу IThisAndThat, на которую ссылается клиент и которая содержит функциональные возможности для обоих??

Вы можете сделать оба:

  • вы можете создать отдельный класс службы реализации — один для IThis, другой для IThat
  • или вы можете создать один класс реализации службы, который реализует как IThis, так и IThat

Этот выбор полностью зависит от вас.

Для каждого имеющегося у вас класса реализации службы вы можете определить любое количество конечных точек, которые хотите иметь. Таким образом, если у вас есть ThisService, реализующий IThis, вы можете определить для него конечную точку HTTP и TCP, а также у вас есть ThatService, который реализует IThat, для которого вы определяете конечную точку TCP. Это полностью зависит от вас.

НО: вы можете определить свои конечные точки только для каждого класса реализации службы. Если у вас есть ThisAndThatService, реализующий оба сервисных контракта, вы не можете определить 3 конечные точки для IThis и две разные для IThat – определяемые вами конечные точки относятся к классу реализации службы.

Пока я спрашиваю, можете ли вы определить базовый адрес для tcp или только для http?

Да, абсолютно точно — вы можете определить базовый адрес для каждой из различных схем адресации (http, net.tcp, net.msmq, net.pipe и т. д.).

person marc_s    schedule 30.05.2011
comment
@marc_s, безусловно, конечная точка относится к интерфейсу, а не к классу реализации - в конце концов, конечная точка полагается на контракт, а не на реализацию. Определите «службу» для каждой реализации, но служба может иметь несколько конечных точек, каждая из которых имеет свои собственные (или общие) контракты...? - person Kirk Broadhurst; 09.06.2011
comment
@Kirk Broadhurst: да, конечная точка зависит от интерфейса, НО она определяется внутри тега ‹service›, который определяется один раз для класса реализации службы - person marc_s; 09.06.2011
comment
@marc_s Тогда я не понимаю ... вы не можете определить 3 конечные точки для IThis и две разные для IThat .... Конечно, у вас будет только 5 конечных точек в одной службе, 3 из которых реализуют IThis, а 2 реализуют IThat. - person Kirk Broadhurst; 09.06.2011
comment
@Kirk Broadhurst: конечные точки из всех сервисных контрактов, реализованных одним классом реализации сервисов, имеют ряд общих черт: конфигурацию поведения сервиса, базовые адреса сервиса и т. д., поскольку они определяются в реализации для каждого сервиса- уровень класса. - person marc_s; 09.06.2011
comment
@marc_s Я понимаю, но вы написали, что если у вас есть ThisAndThatService, реализующий оба сервисных контракта, вы не можете определить 3 конечные точки для IThis и две разные для IThat, что, я считаю, вводит в заблуждение. Вы можете определить 3 конечные точки для IThis и 2 разные для IThat — они просто должны находиться в одной службе. - person Kirk Broadhurst; 10.06.2011
comment
@Kirk Broadhurst: да, вы можете определить три конечные точки для IThis и две для IThat, но не с разными базовыми адресами.... - person marc_s; 10.06.2011

Некоторые основы:

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

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

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

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

Вот очень краткая и простая страница MSDN, которая описывает эти концепции. http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/9f4391e9-8b9f-4181-a081-860d42b992a9/

В Интернете есть много информации о WCF, и есть чему поучиться. Лучше всего посмотреть некоторые учебные пособия или руководства, которые сосредоточены на том, что вы пытаетесь сделать.

person Kirk Broadhurst    schedule 30.05.2011
comment
Есть комментарии по этому минусу? Это вводит в заблуждение или неправильно в каком-то смысле? - person Kirk Broadhurst; 09.06.2011