Служба WCF: невозможно вызвать методы через конечную точку "WebHttpBinding"

Я создал сервис WCF, вот его раздел конфигурации:

<system.serviceModel>
<services>
  <service name="McActivationApp.EnrollmentService" behaviorConfiguration="McActivationApp.EnrollmentServicBehavior">
    <endpoint address="" binding="webHttpBinding" contract="McActivationApp.IEnrollmentService"/>
    <endpoint address="mex" binding="mexHttpBinding" contract="McActivationApp.IEnrollmentService" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="McActivationApp.EnrollmentServicBehavior">
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>

Я подключился к службе с помощью WcfTestClient, добавил службу и могу вызывать только те методы, которые находятся в разделе "IEnrollmentService (MetadataExchangeHttpBinding_IEnrollmentService)" (они работают как положено).

Но методы из другого раздела "IEnrollmentService (WebHttpBinding_IEnrollmentService)" не могут быть вызваны. Когда я пытаюсь вызвать любой из них, я получаю следующую ошибку:

Не удалось вызвать службу. Возможные причины: служба недоступна или недоступна; конфигурация на стороне клиента не соответствует прокси; существующий прокси-сервер недействителен. Обратитесь к трассировке стека для более подробной информации. Вы можете попытаться выполнить восстановление, запустив новый прокси-сервер, восстановив конфигурацию по умолчанию или обновив службу.

Детали ошибки:

The Address property on ChannelFactory.Endpoint was null.  The ChannelFactory's Endpoint must have a valid Address specified.
   at System.ServiceModel.ChannelFactory.CreateEndpointAddress(ServiceEndpoint endpoint)
   at System.ServiceModel.ChannelFactory`1.CreateChannel()
   at System.ServiceModel.ClientBase`1.CreateChannel()
   at System.ServiceModel.ClientBase`1.CreateChannelInternal()
   at System.ServiceModel.ClientBase`1.get_Channel()
   at EnrollmentServiceClient.UpdateEnrollmentProfile(String enrollmentId, String siteName, String deployServerName, Int32 methodId, String deviceClass, String deviceName, String registrationCode)

Вопрос 1: Правильно ли я понимаю, что в случае вызова методов "IEnrollmentService (WebHttpBinding_IEnrollmentService)" мне нужно дополнительно указать некоторую конечную точку?

Вопрос 2: Могу ли я получить это работоспособным вообще?

Вопрос 3: Должен ли я заботиться о них (так как я смогу вызывать методы из своего "пользовательского" приложения)?

3 ответа

Решение

Спасибо, ребята, за ваши ответы, они дали мне немного еды, чтобы подумать. Вот ответы на мои вопросы:

Ответ1:

На самом деле, как указано в "marc_s", проблема заключается в том, что моя служба была настроена как служба "REST", поэтому ответ "Да", чтобы эти службы были доступны для приложения WcfTestClient. Требуется дополнительная конечная точка (basicHttpBinding).

Ответ2:

Как указано в "answer1": да, чтобы это работало, вам нужно добавить базовую конечную точку HttpBinding.

Ответ3:

Это зависит. Если вы не планируете проводить "тестирование" с помощью WcfTestClient - все равно. В моем конкретном случае я буду реализовывать модульные тесты для проверки результатов вызова метода, поэтому работоспособность в WcfTestClient не важна.

Спасибо вам и +1 за каждый полезный ответ.

PS Причина, по которой я принял собственный ответ, заключается в том, что он согласуется с вопросами (которые важны для меня).

Вы должны иметь возможность вызывать методы в службе с webHttpBinding (REST) ​​с использованием обычного браузера - не требуется WcfTestClient... в этом весь смысл (и преимущество) REST - это всего лишь служба "XML-over-HTTP" (значительно упрощенная).

Просто наведите ваш браузер на конечную точку вашего сервиса

http://YourServer/YourVirtualDirectory/YourService.svc

и вы должны увидеть свою службу там...

WCFTestClient не поддерживает службы REST (WebHttpBinding).

Другие вопросы по тегам