webservice hacer consumir como asp.net vb.net web-services

asp.net - hacer - ¿Creando un servicio web sin un archivo ASMX?



webservice asmx (5)

He escrito un control compuesto ASP.NET que incluye algo de Javascript que se comunica con un servicio web.

He empaquetado las clases para el control y el servicio en una DLL para que sea agradable y fácil para las personas usarlo en otros proyectos.

El problema que estoy teniendo es que además de hacer referencia a la DLL en su proyecto, el consumidor de mi control también debe incluir un archivo .ASMX para el servicio web. Si bien no es un archivo complicado (solo una línea que se refiere a la clase en la DLL), me gustaría evitar tenerlo si puedo.

¿Hay alguna manera de evitar tener que tener el archivo .ASMX?

  • ¿Puedo registrar el servicio con el servidor web en Application_Start?
  • ¿Puedo hacer un cambio de web.config para hacer referencia a él de alguna manera?

¡Todas las sugerencias fueron recibidas con gratitud!

ACTUALIZACIÓN: El artículo vinculado a la respuesta de John Sheehan (a continuación) funciona, pero no si desea llamar al servicio web utilizando AJAX. ¿Alguien sabe de una versión amigable AJAX?


La respuesta corta es no. El ASMX es el punto de entrada para cualquier servicio web. Hay alternativas si usa WCF, pero eso no es exactamente lo mismo.


Considere probar métodos de página ( vea esta publicación en el blog ). Todo lo que tienes que hacer es agregar el atributo de método web a un método estático en el código aspx detrás. Luego acceda al objeto PageMethod desde su código del lado del cliente (javascript). No se necesitan archivos ASMX. Espero que esto ayude.


Prueba algo como esto. No sé si funcionará bien. Obtuve esta idea de ELMAH, que crea un controlador para una página que no existe físicamente y luego la sirve desde el ensamblado.

<configuration> <system.web> <httpHandlers> <add verb="*" path="*WebService.asmx" type="MyHandler.WebServiceHandler, MyHandler" /> </httpHandlers> </system.web> </configuration>

EDITAR: Estaba cerca, mira este artículo (en VB): http://www.codeproject.com/KB/aspnet/wsinaclasslibrary.aspx


Sé que esta es una pregunta muy antigua, pero no se ha respondido correctamente, así que aquí está:

Cada solicitud * .ASMX es manejada por System.Web.Services.Protocols.WebServiceHandlerFactory por defecto.

Al observar el código fuente de esta clase en el reflector .NET, es posible tener un servicio web sin un archivo ASMX, pero tendrá que llamar al método interno CoreGetHandler través de la reflexión.

El siguiente método tomará su servicio web y devolverá su IHttpHandler.

public IHttpHandler GetHttpHandlerForWebService(WebService webService, HttpContext context) { var webServiceType = webService.GetType(); var wshf = new System.Web.Services.Protocols.WebServiceHandlerFactory(); var coreGetHandler = wshf.GetType().GetMethod("CoreGetHandler"); var httpHandler = (IHttpHandler)coreGetHandler.Invoke(wshf, new object[] { webServiceType, context, context.Request, context.Response }); return httpHandler; }

Una vez que tenga su httphandler, es solo cuestión de llamar

httpHandler.ProcessRequest (contexto)

Hecho. Sin ASMX y sin entradas web.config.