2009-02-12 15 views
7

He creado el siguiente servicio RESTful WCF, que funciona bien cuando se ejecuta en VS.¿Por qué este servicio WCF no reconoce el parámetro UriTemplate?

[OperationContract] 
[WebGet(ResponseFormat = WebMessageFormat.Json, 
    UriTemplate = "/sales/start={start}&end={end}")] 
List<Sales> GetSalesByDate(string start, string end); 

Sin embargo, al implementar esto a mi servidor de prueba (que se ejecuta Win2K3 y IIS6) que recibe el siguiente error de servidor:

operación 'GetSalesByDate' en el contrato de usos 'ISalesService' GET, sino que también tiene el cuerpo parámetro 'inicio'. Las operaciones GET no pueden tener un cuerpo. Haga que el parámetro 'inicie' un parámetro UriTemplate o cambie de WebGetAttribute a WebInvokeAttribute.

Obviamente ya he hecho 'comenzar' un UriParameter. Entonces, ¿alguien puede decirme por qué se lanza una excepción?

EDIT: Para referencia, aquí es mi fichero de configuración:

<?xml version="1.0"?> 
<configuration> 
    <system.serviceModel> 
     <services> 
      <service name="Services.SalesService"> 
       <endpoint behaviorConfiguration="webBehavior" 
          binding="webHttpBinding" 
          contract="Services.ISalesService"/> 
      </service> 
     </services> 
     <behaviors> 
      <endpointBehaviors> 
       <behavior name="webBehavior"> 
        <webHttp/> 
       </behavior> 
      </endpointBehaviors> 
     </behaviors> 
    </system.serviceModel> 
</configuration> 

Respuesta

10

Resulta /sales/start={start}&end={end} no es un URI válido (la!). Después de un poco de prueba y error, finalmente descubrí esto. Ajustando la UriTemplate con un '?' resuelve el problema.

[OperationContract] 
[WebGet(ResponseFormat = WebMessageFormat.Json, 
    UriTemplate = "/sales/?start={start}&end={end}")] 
List<Sales> GetSalesByDate(string start, string end); 

Gracias por su ayuda!

+0

No entiendo por qué funcionó en el cuadro dev, pero no en el servidor. ¡Pero me alegra que estés desbloqueado! – Brian

+0

Yo tampoco. Funciona bien en VS con el Uri incorrecto. Extraño, lo sé ... –

4

Sé que es muy tarde, pero ¿por qué no usaste el siguiente formato?

UriTemplate = "/sales/{start}/{end}" 
Cuestiones relacionadas