Pregunta

Estoy teniendo un par de problemas que pueden estar relacionados, o no. Noté que cuando utilizo Agregar referencia de servicio en Visual Studio para agregar una referencia a mi servicio de datos, los reference.cs que genera no se compila. Se queja de un espacio de nombres que faltan. Puedo arreglarlo para compilar, pero esto sucede cada vez que actualizar la referencia, y es preocupante también en otros niveles, tales como "voluntad esta causa otros problemas".

También se dio cuenta de que cuando hago esto, mi servidor host (una aplicación de consola que aloja el servicio de datos) registra lo siguiente:

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

Esta es la configuración del servicio:

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

Y el comportamiento:

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

Cuando intento ejecutar svcutil http://localhost:8752/DataService/, me sale esto:

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.  

Algunas ideas? Muy apreciado

Gracias

¿Fue útil?

Solución

creo que se va a conectar a una dirección equivocada. Usted tiene una dirección base

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

y encima de que una dirección de punto final relativa

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

para que su URL completa será la combinación de los dos:

http://localhost:8752/DataService/svc

¿Se intenta conectar allí ??

No estoy seguro de si se puede tener un "mex" punto final intercambio de metadatos con los servicios WCF REST, de verdad. Yo tenía la impresión de que el proxy del lado del cliente para un servicio de datos WCF recibe sus metadatos a través de una llamada URL especial desde el extremo de HTTP. Así que tal vez intente extraer que a partir de su configuración así. (Y no se puede utilizar svcutil en ese servicio, creo - svcutil es sólo para llamadas de servicio SOAP, si no me equivoco)

Además, dado que está utilizando webHttpBinding y auto-hosting, es necesario agregar el comportamiento webHttp:

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

Si haces estos dos pasos, creo que debería ser capaz de conseguir en su servicio de datos WCF. Pruébelo y háganos saber!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top