WCF wsHttpBinding и BasicHttpBinding в одном приложении службы WCF
Мне сказали, что wsHttpBinding не поддерживает старых клиентов, которым все еще нужно использовать более старую версию SOAP. Я хочу добавить конечную точку BasicHttpBinding в то же приложение-службу WCF, чтобы клиенты могли использовать любую конечную точку в зависимости от используемой технологии. Я смущен тем, какой адрес использовать для каждого из них. По умолчанию wsHttpBinding не имеет набора адресов. Каким должен быть адрес конечной точки BasicHttpBinding? Не стоит адрес wsHttpBinding be (для моего примера) http://localhost/WcfService1/Service1.svc ?
2 ответов
есть две вещи, которые вы должны рассмотреть здесь:
если ваш хостинг в IIS (или был частью IIS7), вы не можете установить базовый адрес - базовый адрес для вашей службы будет виртуальным каталогом, где
MyService.svc
живет файла. Вы все еще можете установить относительные адреса, хотяесли вы self-host, вы обычно добавляете базовые адреса в свою конфигурацию, поэтому вы можете избавить себя от необходимости указывать весь адрес время (но вы можете - если хотите).
так что если у вас есть свой MyService.svc
внутри виртуального каталога под названием MyApp
на localhost
машина, а затем используйте эту конфигурацию:
<service name="MyService" behaviorConfiguration="Default">
<endpoint
address="wsHttp"
binding="wsHttpBinding"
contract="IMyService" />
<endpoint
address="basic"
binding="basicHttpBinding"
contract="IMyService" />
</service>
тогда ваш" старый стиль " basicHttp сервис будет доступен по адресу:
http://localhost/MyApp/MyService.svc/basic
и ваш новый сервис wsHttp приводом будет доступен на сайте:
http://localhost/MyApp/MyService.svc/wsHttp
вы можете назвать эти относительные адреса (все, что после .../MyApp/MyService.svc
) все что угодно - просто убедитесь, что они отличаются друг от друга.
хостинг в IIS --> расположение (виртуальный каталог) вашего *.svc-файл становится вашим базовым адресом.
если вы самостоятельно размещаете свою службу внутри консольного приложения или службы Windows NT, вы можете установить свои базовые адреса самостоятельно:
<services>
<service name="MyService" behaviorConfiguration="Default">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8185/Services/" />
</baseAddresses>
</host>
</service>
</services>
теперь в этом случае ваш "старый стиль" basicHttp сервис будет доступен по адресу:
http://localhost:8185/Services/basic
и ваш новый сервис wsHttp приводом будет доступен at:
http://localhost:8185/Services/wsHttp
вы можете определить базовый адрес для каждого из транспортов, например, один для http://, один для net.tcp:// и так далее.
и, конечно, если вы действительно должны, вы также можете определить свои полные адреса внутри вашего <endpoint>
элемент для каждой из конечных точек службы-это дает вам полную гибкость (но работает только в сценариях самостоятельного размещения).
Марк
в WCF у вас есть базовый адрес и адрес enpoint, в вашем случае вы можете сделать что-то вроде этого:
<service name="WcfEndpoints.Service1" behaviorConfiguration="WcfEndpoints.Service1Behavior">
<!-- Service Endpoints -->
<endpoint address="new" binding="wsHttpBinding" contract="WcfEndpoints.IService1" />
<endpoint address="old" binding="basicHttpBinding" contract="WcfEndpoints.IService1" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
Примечание вам потребуется дополнительная работа для конечной точки basicHttpBinding для работы со старыми клиентами (asmx)