Ошибка тестового клиента WCF: не удалось вызвать службу

Я получаю сообщение об ошибке при попытке использовать тестовый клиент WCF с моей службой WCF. Вот сервисный код:

[ServiceContract]
public interface IEmployeeService
{
    [OperationContract(Name = "GetEmployee")]
    [WebGet(RequestFormat = WebMessageFormat.Xml,
        UriTemplate = "/Employees/{employeeNumber}")]
    Employee GetEmployee(string employeeNumber);
}

public Employee GetEmployee(string employeeNumber)
{
    var employeeNumberValue = Convert.ToInt32(employeeNumber);
    var employee = DataProvider.GetEmployee(employeeNumberValue);
    return employee;
}

<system.serviceModel>
    <services>
        <service name="Employees.Services.EmployeeService"
                 behaviorConfiguration="metaBehavior">
            <endpoint address=""
                      behaviorConfiguration="webHttp"
                      binding="webHttpBinding"
                      contract="Employees.Services.IEmployeeService">
            </endpoint>
            <endpoint address="mex"
                      binding="mexHttpBinding"
                      contract="IMetadataExchange">
            </endpoint>
        </service>
    </services>
    <behaviors>
        <endpointBehaviors>
            <behavior name="webHttp">
                <webHttp/>
            </behavior>
        </endpointBehaviors>
        <serviceBehaviors>
            <behavior name="metaBehavior">
                <serviceMetadata httpGetEnabled="true" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>

Я могу подключиться к службе с помощью тестового клиента WCF, но когда я пытаюсь вызвать GetEmployee (employeeNumber), я получаю следующую ошибку:

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

Мне удалось успешно вызвать эту службу, отправив запрос из браузера.

Есть идеи, почему я не могу использовать тестовый клиент WCF?


person Kevin Babcock    schedule 02.03.2009    source источник


Ответы (3)


Пожалуйста, проигнорируйте мой предыдущий ответ. Я не думаю, что проблема в конфигурации на стороне клиента.

См. Тестовый клиент WCF и WebHttpBinding..

Это ограничение самой модели веб-программирования. В отличие от конечных точек SOAP (например, с BasicHttpBinding, WSHttpBinding и т. Д.), У которых есть способ предоставлять метаданные о себе (WSDL или Mex) с информацией обо всех операциях / параметрах в конечной точке, в настоящее время нет стандартного способа раскрытия метаданных для конечная точка, отличная от SOAP - и это именно то, что представляют собой конечные точки на основе webHttpBinding. Короче говоря, тестовый клиент WCF бесполезен для конечных точек в Интернете. Если какой-то стандарт для представления конечных точек в веб-стиле появится, когда WCF отправит свою следующую версию, мы, скорее всего, обновим тестовый клиент для его поддержки, но на данный момент он не получил широкого распространения.

person Eugene Yokota    schedule 04.03.2009
comment
@ stimpy77, я просто процитировал связанный ответ сотрудника MS. В WCF привязка называется WebHttpBinding и в WSDL 2, он называется HTTP Binding, но это достаточно ясно из контекст, что здесь означает Интернет. Термин REST выходит далеко за рамки простого раскрытия методов через HTTP. Речь идет о том, чтобы рассматривать вещи как ресурсы и использовать HTTP-команды и т. Д. См. Модель зрелости Ричардсона. - person Eugene Yokota; 10.05.2011

Я думаю, что ваша конфигурация неправильная, вам следует добавить node security mode = "None" и атрибут bindingConfiguration = "NoneSecurity"

Измените мою конфигурацию, попробуйте еще раз:

<system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="NoneSecurity"
          maxBufferPoolSize="12000000" maxReceivedMessageSize="12000000" useDefaultWebProxy="false">
          <readerQuotas maxStringContentLength="12000000" maxArrayLength="12000000"/>
          <security mode="None"/>
        </binding>
      </wsHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="Elong.GlobalHotel.Host.IHotelAPIBehavior"
        name="Elong.GlobalHotel.Host.IHotelAPI">
        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="NoneSecurity" contract="Elong.GlobalHotel.Host.IIHotelAPI">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Elong.GlobalHotel.Host.IHotelAPIBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
person lei.liu    schedule 29.11.2012

  I had a similar problem, the solution was in a minor error in the message alias ... that very generic message ... in our case was assigned a Boolean false if the right is true.
  This value was in the MDM application that was running on websphere.

путь в моем случае:

   /opt/infamdm/hub/server/resources/cmxserver.properties
   /opt/infamdm/hub/cleanse/resources/cmxcleanse.properties
person waldomiro    schedule 30.10.2014