2011-05-26 20 views
26

hola yo encontré uno de los ejemplos de RESTO WCF con un método WEBINVOKE al igual que el siguienteVentajas de WebInvoke postales, frente a WebGet

[OperationContract] 
[WebInvoke(
BodyStyle=WebMessageBodyStyle.Bare, 
Method="POST", 
RequestFormat=WebMessageFormat.Xml, 
ResponseFormat=WebMessageFormat.Xml, 
UriTemplate="CreateStudent/{StudentName}/{Chair}/{AverageNote}")] 
int Insert(string StudentName, string Chair, string AverageNote); 


[OperationContract] 
[WebGet(
BodyStyle= WebMessageBodyStyle.Bare, 
RequestFormat = WebMessageFormat.Xml, 
ResponseFormat = WebMessageFormat.Xml)] 
Student[] GetAllStudents(); 

mi pregunta es ¿Puedo usar el método WebGet en lugar de WEBINVOKE al igual que a continuación y cuál es exactamente la diferencia entre WEBINVOKE POST y WEBGET, según mi observación, estamos enviando los parámetros al anexar cadenas de consulta en las plantillas de URI para WEbGet y WebInvoke POST, cuáles son las ventajas que podemos obtener al utilizar WebInvoke POST que podemos no obtener utilizando WEBGET

[OperationContract] 
[WebGet(
BodyStyle=WebMessageBodyStyle.Bare, 
RequestFormat=WebMessageFormat.Xml, 
ResponseFormat=WebMessageFormat.Xml, 
UriTemplate="CreateStudent/{StudentName}/{Chair}/{AverageNote}")] 
int Insert(string StudentName, string Chair, string AverageNote); 

Respuesta

46

Es una gran diferencia. En primer lugar resto se utiliza por lo general con estos verbos HTTP:

  • GET - Recuperación de elementos
  • Post - artículos insertando
  • PUT - artículos actualizar
  • Eliminar - borrar elementos

Usted nunca debe usar GET para nada más que recuperar elementos. El uso de HTTP GET para la modificación de datos se considera una mala práctica en todo el desarrollo web. Para activar GET, solo necesita crear un enlace en la página web o simplemente escribir una URL en el navegador. Tocará actualizar 50 veces y tendrá 50 insertos iguales. La modificación de datos siempre debe hacerse con POST. Si tiene un formulario que desencadena HTTP POST (la publicación no se puede desencadenar directamente) y acierta, el navegador de actualización generalmente le preguntará si desea que el formulario se envíe nuevamente = si realmente desea publicar y procesar los datos nuevamente en el servidor.

Otro problema es que la solicitud GET se puede almacenar en caché y se puede redirigir, pero las solicitudes POST no.

+0

bien explicado ... –

+1

A menos que el servicio web que está creando necesite aceptar llamadas de dominio cruzado ajax, en cuyo caso se requiere GET para la recuperación y modificación de datos. POST no está permitido en situaciones de dominio cruzado ajax. –

+0

¡Esa es una imagen perfecta! – iamCR

2

Para responder a su pregunta, le recomendaría usted para entender la semántica del protocolo HTTP, especialmente los verbos HTTP, como GET, POST, PUT, DELETE
HTTP GET se hace para recuperar recursos desde cualquier lugar y por lo tanto la solicitud no debe alterar el estado del recurso.
HTTP POST se utiliza para crear y, a veces, actualizar contenido y, por lo tanto, se ha utilizado en el método Insert anterior.
Si ejecuta el servicio WCF arriba y ve cómo se forman estas solicitudes y el servidor, verá que GET no tiene una carga útil corporal, mientras que POST sí lo tiene. En el caso de POST, el cuerpo contiene el contenido que debe crearse \ update.

5

Este enlace debe proporcionar una mayor comprensión de las respuestas proporcionadas:

http://blog.markkoltnuk.com/2011/02/14/understanding-wcf-webinvokewebget-attributes/

Permite explicar, de una vez por todas, lo que la diferencia entre WebInvoke & WebGet.

WebGet (utilizado comúnmente para recuperar datos) atributo

El WebGet expone las operaciones utilizando el verbo GET. Puede acceder al punto final directamente desde un navegador web escribiendo el URI en el servicio en la barra de direcciones. Los parámetros se pueden enviar dentro del URI como parámetros de cadena de consulta o incrustados en el URI. El atributo WebGet debe usarse solo para la recuperación de datos debido a sus capacidades de almacenamiento en caché.

WebInvoke (comúnmente utilizado para la entrada/actualización de datos) El atributo WebInvoke expone servicios que usan otros verbos HTTP como POST, PUT y DELETE. POST es el valor predeterminado, pero se puede cambiar estableciendo la propiedad Método del atributo. El atributo WebInvoke debe usarse solo para la entrada/actualización de datos.

+1

No haga clic en el enlace de arriba. Me redireccionaron a un sitio de malware. –

Cuestiones relacionadas