Невозможно правильно сослаться на службу данных wcf - PullRequest
2 голосов
/ 26 февраля 2010

У меня есть пара вопросов, которые могут быть связаны или нет. Я заметил, что когда я использую Добавить ссылку на службу в 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 Ответ

2 голосов
/ 26 февраля 2010

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

<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. Попробуйте и дайте нам знать!

...