Ошибка тестового клиента WCF:Не удалось вызвать службу
-
03-07-2019 - |
Вопрос
Я получаю сообщение об ошибке при попытке использовать тестовый клиент 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?
Решение
Пожалуйста, проигнорируйте мой предыдущий ответ.Я не думаю, что проблема в конфигурации на стороне клиента.
Видишь Тестовый клиент WCF и привязка webHttpBinding.
Это ограничение самой модели веб-программирования .В отличие от SOAP конечные точки (т.е. те, у которых есть BasicHttpBinding, wsHttpBinding и т.д.) у которых есть способ предоставлять метаданные о себе (WSDL или Mex) с информацией обо всех операциях / параметры в конечной точке, там в настоящее время нет стандартного способа, чтобы разоблачить метаданные для конечной точки SOAP и это именно то, что привязку webhttpbinding на основе конечных точек. Короче говоря, тестовый клиент WCF не будет полезен для конечных точек на веб-основе.Если некоторые стандартные представления веб-стиль конечные точки возникает, когда WCF корабли его следующая версия, то, скорее всего, обновление тестового клиента для его обслуживания, но сейчас нет ни одного широко принят.
Другие советы
Я думаю, что ваша конфигурация неверна, вам следует добавить режим безопасности узла ="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>
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