2011-01-10 8 views
0

я создал службу WCF, вот это раздел конфигурации:службы WCF: Невозможно вызвать методы через конечную точку в «WebHttpBinding»

<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)» не подлежат вызову. Когда я пытаюсь вызвать любой из них я получил следующее сообщение об ошибке:

Failed to invoke the service. Possible causes: The service is offline or inaccessible; the client-side configuration does not match the proxy; the existing proxy is invalid. Refer to the stack trace for more detail. You can try to recover by starting a new proxy, restoring to default configuration, or refreshing the service.

Сведения об ошибке:

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: Должен ли я заботиться о них (так как я могу вызвать методы из своего «пользовательского» приложения)?

ответ

2

Спасибо, ребята, за ваши ответы, они дали мне некоторая пища думать. Ниже приведены ответы на мои вопросы:

answer1:

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

Ответ2:

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

Ответ3:

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

Благодарим вас и «+1» за каждый полезный ответ.

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

2

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

+0

Полезно знать. Благодарю. – Budda

2

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

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

http://YourServer/YourVirtualDirectory/YourService.svc 

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

+0

Да, я вижу эту услугу. Но я не вижу его методов. Или они не отображаются так, как это делают WebServices? Мне просто нужно «использовать» их, и все. Правильно? – Budda

+0

В .NET 4/WCF 4 вы должны иметь возможность настроить автоматическую страницу справки, генерируемую из методов службы (к сожалению, в WCF 3.5 такой функции нет) –

Смежные вопросы