2010-02-26 4 views
2

У меня есть пара проблем, которые могут быть связаны или могут не быть. Я заметил, что когда я использую ссылку «Добавить службу» в Visual Studio, чтобы добавить ссылку на мою службу данных, генерируемый ею reference.cs не компилируется. Он жалуется на недостающее пространство имен. Я могу исправить это для компиляции, но это происходит каждый раз, когда я обновляю ссылку, и это беспокоит и на других уровнях, например, «это вызовет другие проблемы».Невозможно правильно ссылаться на wcf dataservice

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

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. 

Любые идеи? Высокая оценка

Благодаря

ответ

2

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

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

и на вершине, что относительный адрес конечной точки

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

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

http://localhost:8752/DataService/svc 

Пробовали ли вы подключиться туда?

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

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

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

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

+0

Я добавил поведение конечной точки webhttp, но я не вижу никакой разницы. Еще одна вещь, о которой я не уверен, заключается в том, что у меня также есть «нормальная» служба WCF (с использованием [ServiceContract]) в том же процессе. Мне интересно, действительно ли эта «ошибка» - «Добавить ссылку на службу», просто попробуйте кучу вариантов URI до тех пор, пока она не будет работать, а код, который он генерирует, отлично подходит для редактирования. Я собираюсь попробовать некоторые базовые тесты и посмотреть, действительно ли это работает :) – JohnL

Смежные вопросы