Ошибка тестового клиента WCF: не удалось вызвать службу - PullRequest
5 голосов
/ 03 марта 2009

Я получаю сообщение об ошибке при попытке использовать тестовый клиент 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?

Ответы [ 3 ]

11 голосов
/ 04 марта 2009

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

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

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

0 голосов
/ 30 октября 2014
  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
0 голосов
/ 29 ноября 2012

Я думаю, что ваша конфигурация неверна, вы должны добавить режим безопасности узла = "Нет" и атрибут 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>
...