Преимущества нескольких конечных точек в сервисе WCF - PullRequest
0 голосов
/ 16 сентября 2011

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

Также, пожалуйста, помогите мне с примером того, как разместить такую ​​службу в IIS и как клиент wcf будет подключаться к конкретной конечной точке.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

Преимущество предоставления разных конечных точек состоит в том, что каждая конечная точка может использовать разные привязки. Таким образом, исходя из возможностей клиента, он мог выбрать подходящую привязку. Например, вы можете предоставить совместимую конечную точку для клиентов Java, PHP, ... и проприетарную двоичную конечную точку, которая может быть быстрее, но только для клиентов .NET.

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

Для размещения службы WCF в IIS у вас есть 2 возможности: либо в приложении ASP.NET, где доступны только HTTP-привязки (basicHttpBinding, wsHttpBinding, webHttpBinding, ...), либо в WAS (IIS Только 7.0), где вы можете использовать двоичные привязки. С точки зрения клиента, вы добавляете ссылку на сервис к клиентскому проекту, указывая на данный URL сервиса, и используете сервис. А вот другая статья вы, которая обсуждает это.

1 голос
/ 16 сентября 2011

Из опыта:

  • Использование разных привязок, например, одного BasicHttpBinding для клиентов Java при использовании WsHttpBinding для клиентов .NET. Также HTTPS для одних и HTTP для других ...

  • Разделение и раскрытие различных контрактов / интерфейсов. Например, у вас есть один интерфейс, который предоставляет множество операций, и у вас есть урезанный интерфейс, который выполняет базовые функции, и вы публикуете вторую снаружи, чтобы внутренние клиенты использовали конечную точку для расширенного интерфейса, а внешние клиенты использовали другую. *

Например

interface IFoo
{
   void DoBasic();  
}

interface IFooInternal : IFoo
{
   void DoMore();  
}

Теперь у вас есть Один класс , реализующий оба:

public class Foo : IFooInternal 
{
    ....
}

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

...