WCF - вызвать один и тот же сервис со стороны клиента и сервера - PullRequest
1 голос
/ 16 июня 2010

У меня есть простой сервис WCF, который я вызываю на стороне сервера из кода через сервисную ссылку. Он используется для проверки и работает, он был автоматически настроен Visual Studio и использует SOAP, я думаю, потому что привязка - это wsHttpBinding.

Я хочу использовать ту же службу WCF, но назвать ее на стороне клиента из jQuery с помощью ajax (). Я пытаюсь реализовать это с помощью этих инструкций .

Но если я внесу изменения, чтобы заставить вызов на стороне клиента работать, я должен добавить декорацию, ниже которой, я думаю, сломаю то, что работает на стороне сервера, а также изменить раздел system.serviceModel в web.config. *

[WebInvoke(Method = "POST",
    BodyStyle = WebMessageBodyStyle.Wrapped,
    ResponseFormat = WebMessageFormat.Json,
    RequestFormat= WebMessageFormat.Json) ]

Как у меня есть служба WCF, которую можно вызывать как со стороны сервера, так и со стороны клиента (jQuery / ajax)?

Или, другими словами, это может быть неправильно сформулировано, может ли конечная точка иметь несколько привязок?

1 Ответ

0 голосов
/ 16 июня 2010

Конечная точка в WCF имеет ABC

  • Адрес
  • Binding
  • Договор

Поэтому: нет, одна конечная точка не может иметь несколько привязок. Но вы можете иметь несколько конечных точек для одного контракта!

Так что, если вы хотите предоставить два метода с практически одинаковой функциональностью по сравнению с SOAP и REST, вам нужно иметь две конечные точки.

Вы можете определить свой собственный метод обслуживания, который будет вызываться как из SOAP, так и из REST, как показано в той ссылке, которую вы упомянули.

Затем вам понадобятся две отдельные конечные точки:

<services>
   <service name="YourService">
     <endpoint
           address="http://YourServer/YourVirtualDir/YourService.svc"
           binding="wsHttpBinding"
           contract="IYourService" />
     <endpoint
           address="http://YourServer/YourVirtualDir/YourService2.svc"
           binding="webHttpBinding"
           behaviorConfiguration="webCallable"
           contract="IYourService" />
   </service>
</services>

Вам нужно определить поведение конечной точки, которое включает в себя поведение <webHttp/> - или вам нужен файл * .svc, который использует WebServiceHost (вместо простого ServiceHost) для размещения вашей службы REST.

Как видите, теперь у вас есть две отдельные конечные точки (с двумя отдельными файлами * .svc в каталоге vritual), два отдельных адреса - но оба имеют один и тот же контракт (определяют одинаковые операции).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...