Я создал службу WCF, и теперь я хочу вызвать ее из ссылки, но почему InvalidOperationException? - PullRequest
1 голос
/ 08 июня 2011

Я написал сервис WCF.Я успешно перешел к сервису, и он говорит:

You have created a service.

Итак, я добавляю ссылку на него, используя «Добавить ссылку на сервис» в visual studio.Затем я пишу следующий код, чтобы использовать его ....

ServiceReference1.VLSContentServiceClient client = new ServiceReference1.VLSContentServiceClient("VLSContentServiceEndpointBehaviour");
List<ServiceReference1.Category> cats = client.GetCategoriesByGET();

Но я получаю сообщение об ошибке:

Не удалось найти элемент конечной точки с именем 'VLSContentServiceEndpointBehaviour' и contract 'ServiceReference1.IVLSContentService 'в разделе конфигурации клиента ServiceModel.Это может быть связано с тем, что для вашего приложения не найден файл конфигурации или из-за того, что в клиентском элементе не найден элемент конечной точки, соответствующий этому имени.

Это не имеет смысла, так как аргумент 'endPointConfigurationName' соответствует тому, чтоЯ установил это в сервисе.Вот конфигурация сервиса:

  <system.serviceModel>

    <services>
      <service behaviorConfiguration="VLSContentServiceBehaviour" name="VLSContentService">
        <endpoint address="" behaviorConfiguration="VLSContentServiceEndpointBehaviour" binding="webHttpBinding" contract="IVLSContentService"/>
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="VLSContentServiceBehaviour">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>

      <endpointBehaviors>
        <behavior name="VLSContentServiceEndpointBehaviour">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>

  </system.serviceModel>

Что происходит?

Ответы [ 3 ]

5 голосов
/ 08 июня 2011

Вы используете службу REST - клиент для такой службы не может быть создан с помощью Добавить ссылку на службу. Это только для сервисов SOAP (без поведения webHttpBinding и webHttp). Также, когда вы используете сервис SOAP, вы не передаете имя какой-либо серверной функции конструктору прокси. Прокси-конструктор ожидает имя конечной точки клиента из конфигурации клиента.

Как пользоваться услугой REST

0 голосов
/ 08 июня 2011

Параметр VLSContentServiceEndpointBehaviour при создании экземпляра клиента - это имя конечной точки, а не поведение конечной точки.

Изменение

    <endpoint address="" behaviorConfiguration="VLSContentServiceEndpointBehaviour" binding="webHttpBinding" contract="IVLSContentService"/>

до

    <endpoint address="" name ="Client" behaviorConfiguration="VLSContentServiceEndpointBehaviour" binding="webHttpBinding" contract="IVLSContentService"/>

и создайте клиент службы как

ServiceReference1.VLSContentServiceClient client = new ServiceReference1.VLSContentServiceClient ("Клиент");

Также отсутствует ваш адрес, что немного странно.

0 голосов
/ 08 июня 2011

Похоже, ваш контракт неверен.у вас есть:

contract="IVLSContentService"/>

и ожидается:

contract="ServiceReference1.IVLSContentService"/>

в соответствии с сообщением об ошибке.

также адрес вашей конечной точки пуст.Разве это не должно содержать что-то?

...