Question

I'm having a couple of issues which may be related, or may not. I noticed that when I use Add Service Reference in Visual Studio to add a reference to my data service, the reference.cs it generates does not compile. It complains about a missing namespace. I can fix it up to compile, but this happens every time I update the reference, and it's worrying on other levels too, such as "will this cause other issues".

I also noticed that when I do this, my host server (a console application hosting the data service) logs this:

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

This is the service config:

  <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>

And the behaviour:

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

When I try to run svcutil http://localhost:8752/DataService/, I get this:

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.  

Any ideas? Much appreciated

Thanks

Was it helpful?

Solution

I think you're connecting to a wrong address. You have a base address

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

and on top of that a relative endpoint address

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

so your complete URL will be the combination of the two:

http://localhost:8752/DataService/svc

Did you try to connect there??

I am not sure if you can have a "mex" metadata exchange endpoint with WCF REST services, really. I was under the impression that the client-side proxy for a WCF Data Service gets its metadata over a special URL call from the HTTP endpoint. So maybe try to remove that from your config as well (and you can't use svcutil on that service, I believe - svcutil is only for SOAP service calls, if I'm not mistaken).

Also, since you're using webHttpBinding and self-hosting, you need to add the webHttp behavior:

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

If you do these two steps, I think you should be able to get at your WCF Data Service. Try it and let us know!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top