2010-01-05 16 views
18

Tengo un servicio de asmx que toma un solo parámetro int. Puedo abrir la URL del servicio y ver la pantalla de descripción del servicio. Desde aquí puedo ingresar los parámetros de consulta en un formulario e invocar el servicio web.Posible invocar el servicio ASMX con parámetro a través de cadena de consulta url?

¿Hay alguna forma de invocar un servicio web directamente desde una cadena de URL/consulta?

Esto no funciona:

http://localhost:4653/MyService.asmx?op=MyWebMethod&intParameter=1

¿Alguna idea? Realmente me gustaría poder hacer esto desde un enlace estándar debido a algunos problemas de implementación. ¿Tendré que envolver la solicitud en una página aspx normal?

Respuesta

39

Se puede decorar su método para permitir peticiones HTTP GET, que a su vez debería hacer lo que estás buscando de esta manera:

[WebMethod] 
[ScriptMethod(UseHttpGet=true)] 
public string MyNiftyMethod(int myint) 
{ 
    // ... code here 
} 

y editar el web.config:

<system.web> 
<webServices> 
    <protocols> 
    <add name="HttpGet"/> 
    </protocols> 

Entonces serás capaz de llamar a este método así:

http://mysite.com/Service.asmx/MyNiftyMethod?myint=12345

EDITAR: tenga en cuenta que este método de realizar solicitudes GET conlleva algunos riesgos de seguridad. De acuerdo con la MSDN documentation for UseHttpGet:

Ajuste del propiedad UseHttpGet a cierto podría suponer un riesgo de seguridad para su aplicación si se está trabajando con datos o transacciones sensibles. En solicitudes GET, el mensaje es codificado por el navegador en el URL y es por lo tanto un objetivo más fácil para la manipulación .

+0

Excelente, daré una oportunidad. – Alex

+0

Ok, esto no funcionó, obtuve exactamente el mismo error. – Alex

+0

no funciona ... –

9

Los servicios web de ASMX usan SOAP. Las solicitudes SOAP usan solo POST para invocar métodos. Necesitará generar un cliente proxy en su página aspx para invocar el servicio web. Si realmente necesita utilizar los verbos GET para invocar los servicios web, es posible que deba utilizar un enfoque diferente, como WCF REST.

+0

Esto fue lo suficientemente simple y funcionó en mi situación. – Alex

Cuestiones relacionadas