¿Implementar un servicio web personalizado para el servidor de SharePoint(2007/2010)?
sharepoint-2007 sharepoint-2010 (3)
Según MSDN, para implementar un servicio web personalizado, debemos crear archivos * wsdl.aspx y * disco.aspx, y ponerlos junto con .asmx en la carpeta _vti_bin (C: / Archivos de programa / Archivos comunes / Microsoft Shared / Web Server Extensiones / 14 / isapi). Y coloque la carpeta dll en la carpeta bin de la raíz del directorio virtual de SharePoint. Funciona correctamente para mí.
Sin embargo, también encontré que si pongo el archivo .asmx bajo el directorio virtual raíz sin crear esos archivos * wsdl.aspx y * disco.aspx. Puede funcionar tan bien y mucho más fácil que la forma anterior. Entonces me pregunto ¿cuáles son los posibles problemas de esta manera?
Sin los archivos WSDL y DISCO, los clientes / consumidores del servicio web de la gente pueden tener dificultades para "descubrir" el contrato de su servicio. Si eso no es una preocupación para ti, no te preocupes por eso.
http://.../_layouts/mySubFolder/service.asmx
varios servicios web en SharePoint 2007 que simplemente se implementaron como http://.../_layouts/mySubFolder/service.asmx
. ¡Funciona! Para SharePoint, no importa si la capa de presentación es HTML o XML para un servicio web (en ambos casos, la seguridad debe aplicarse, se puede abordar tanto como http://server/_layouts/mySubFolder/service.asmx
como http://server/sites/subsite/_layouts/mySubFolder/service.asmx
Las cosas que están mal al respecto
- la palabra "diseños" implica "algo que ver con cómo se ve" ... que no es el caso cuando hablamos de servicios web
- Al migrar a SPS2010, donde los servicios de WCF entran en juego, será diferente. Sin embargo, todavía no jugué con SPS2010 y aún no sé, qué diferente. (Somehting aquí - http://blog.mastykarz.nl/wcf-sharepoint-context/ )
Es una publicación bastante antigua, pero pensé que me gustaría añadir algo a esto, ya que no creo que las respuestas hasta la fecha den los detalles relevantes sobre por qué SharePoint está configurado de esta manera.
El motivo por el que implementa los servicios web en ISAPI / vti_bin para SharePoint es porque se realizan modificaciones específicas para las solicitudes a esta carpeta para permitir que SharePoint cree un descubrimiento preciso y un archivo WSDL para el servicio basado en la ruta virtual actual del servicio, no el ruta en el sitio de IIS.
Más específicamente, wsdisco.aspx y wswsdl.aspx manejan las solicitudes a este directorio virtual y llamarán a las correspondientes disco.aspx y wsdl.aspx para generar el descubrimiento xml o wsdl xml correctamente en función de la url actual de SharePoint.
Si agrega una referencia de servicio a su proyecto para http://sharepointsite.com/sitecol/subsite/_vti_bin/lists.asmx, el contexto para las solicitudes realizadas en esa url será relevante para / sitecol / subsitio como es de esperar.
Sin embargo, si agrega una referencia de servicio a http://sharepointsite.com/sitecol/subsite/ _layouts / MyCustSvc.asmx, el contexto se fijará en http://sharepointsite.com/ porque el generador predeterminado de wsdl para ASP.NET no es consciente de las rutas virtuales de SharePoint. En este caso, las llamadas a SPContext en el servicio no funcionarán como se esperaba.
Aquí hay una publicación excelente con ejemplos que explican esto: ¿Dónde se implementan los archivos personalizados del servicio web de SharePoint?