Невозможно правильно сослаться на службу данных wcf

У меня есть пара вопросов, которые могут быть связаны или нет. Я заметил, что когда я использую Add Service Reference в Visual Studio, чтобы добавить ссылку на мой сервис данных, генерируемый reference.cs не компилируется. Он жалуется на отсутствующее пространство имен. Я могу исправить это для компиляции, но это происходит каждый раз, когда я обновляю ссылку, и это беспокоит и на других уровнях, таких как "это вызовет другие проблемы".

Я также заметил, что когда я делаю это, мой хост-сервер (консольное приложение, в котором размещается служба данных) регистрирует это:

An exception occurred [System.Data.Services.DataServiceException] :: The URL 
representing the root of the service only supports GET requests.

Это конфиг сервиса:

  <service behaviorConfiguration="behaviour" name="StatsPlus.Server.HostedServices.SPDataServiceHost">
    <endpoint address="svc" binding="webHttpBinding" contract="System.Data.Services.IRequestHandler" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8752/DataService/"/>
      </baseAddresses>
    </host>
  </service>

И поведение:

    <behavior name="behaviour">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
      <dataContractSerializer maxItemsInObjectGraph="10"/>
    </behavior>

Когда я пытаюсь бежать svcutil http://localhost:8752/DataService/Я получаю это:

HTTP GET Error  
URI: http://localhost:8752/DataService
There was an error downloading 'http://localhost:8752/DataService'.  
The request failed with HTTP status 405: Method Not Allowed.  

Есть идеи? Очень признателен

Спасибо

1 ответ

Решение

Я думаю, что вы подключаетесь не по адресу. У вас есть базовый адрес

<add baseAddress="http://localhost:8752/DataService/"/>

и вдобавок к этому относительный адрес конечной точки

<endpoint address="svc" binding="webHttpBinding" 

поэтому ваш полный URL будет сочетанием двух:

http://localhost:8752/DataService/svc

Вы пытались подключиться там??

Я не уверен, что у вас может быть конечная точка обмена метаданными mex со службами REST WCF. У меня сложилось впечатление, что клиентский прокси-сервер для службы данных WCF получает свои метаданные по специальному URL-вызову из конечной точки HTTP. Поэтому, возможно, попробуйте удалить это из вашей конфигурации (и вы не можете использовать svcutil я полагаю, что для этой службы svcutil предназначен только для вызовов службы SOAP, если я не ошибаюсь).

Кроме того, так как вы используете webHttpBinding и самостоятельно, вам нужно добавить webHttp поведение:

<behavior name="behaviour">
  <serviceMetadata httpGetEnabled="true"/>
  <serviceDebug includeExceptionDetailInFaults="true"/>
  <dataContractSerializer maxItemsInObjectGraph="10"/>
  <webHttp />
</behavior>

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

Другие вопросы по тегам