Вопрос

У меня есть служба WCF, я создал ссылку на нее из MSTEST Project. Вот пример того, как я звоню методы обслуживания:

IEnrollmentService serviceClient = ChannelFactory<IEnrollmentService>
    .CreateChannel(new BasicHttpBinding(),
                   new EndpointAddress("http://localhost/EnrollmentService.svc"));

PublishResult res = serviceClient.PublishEnrollmentProfile(...);

Вместо выполнения у меня есть следующая ошибка:

Приложение типа содержимого / XML; Charset = UTF-8 от ответного сообщения не соответствует типу содержимого привязки (Text / XML; Charset = UTF-8). При использовании пользовательского кодера, будьте уверены, что метод iscontenttypesupported реализован правильно. Первые 710 байтов ответа были: 'Sendera:ActionNotSupportedСообщение с действием «» не может быть обработано на приемнике, из-за несоответствия контракта на конечном контакте. Это может быть из-за несоответствия договора (несоответствующие действия между отправителем и приемником) или несоответствием связывания / безопасности между отправителем и приемником. Убедитесь, что отправитель и приемник имеют тот же договор и одинаковую связь (включая требования к безопасности, например, сообщение, транспорт, нет). '. ---> System.net.WebException: Удаленный сервер вернул ошибку: (500) Внутренняя ошибка сервера ..

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

Я также пытался вызвать методы службы WCF другим способом:

EnrollmentServiceClient serviceClient = new EnrollmentServiceClient("http://localhost/EnrollmentService.svc");

PublishResult res = serviceClient.PublishEnrollmentProfile(...);

Это возвращает мне еще одну ошибку:

Не удалось найти элемент конечной точки с именем 'http: //localhost/mcactivation/enrollmentservice.svc.«И договорная информация о регистрации INROLLINGERVICEREMERCES.IENROLLMESERSERVICE» в разделе конфигурации обслуживания обслуживания Client. Это может быть, потому что файл конфигурации не был найден для вашего приложения, или потому что ни один элемент конечной точки не соответствует этому имени, не может быть найден в элементе клиента.

Вопрос 1:

Какой правильный способ создать ответный клиент WCF?

Вопросы2:

Что не так в моем случае?

Большое спасибо.

PS С некоторыми проблемами я могу подключиться к услуге с wcftestclient, более подробная информация здесь:WCF Service: не могу вызывать методы через конечную точку «WebHTtpBinding»

PPS Вот конфигурация службы WCF Server 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>
Это было полезно?

Решение

Ваша проблема в том, что это: ваш Конфигурация службы Определяет а webHttpBinding конечные точки - это ОСТАЛЬНОЕ («XML-Over-http») конечная точка ....

Тем не менее, ваш клиент использует basicHttpBinding и это МЫЛО Привязка - это нет совместимый!

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

Так:

  • либо добавьте другую конечную точку на ваш сервисный конфигурацию с basicHttpBinding и подключиться к этой конечной точке

или:

  • Измените сторону своего клиента на использование webHttpBinding
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top