Невозможно правильно сослаться на службу данных 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. Попробуйте и дайте нам знать!