Служба WCF: невозможно вызвать методы через конечную точку «WebHttpBinding» - PullRequest
0 голосов
/ 10 января 2011

Я создал сервис 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 ]

2 голосов
/ 10 января 2011

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

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

http://YourServer/YourVirtualDirectory/YourService.svc

, и вы сможете увидеть, что ваш сервис живет там ...

2 голосов
/ 10 января 2011

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

Ответ1:

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

Ответ2:

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

Ответ3:

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

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

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

2 голосов
/ 10 января 2011

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

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