Autor : Gustavo Velez Para : www.gavd.net/servers/ Fecha : 20-06-2005 Versión : 1.0.0 WebServices Parte 4 WebServices Personalizados 2 Para garantizar la integración de WSS y SharePoint con otros tipos de aplicaciones, un sistema de WebServices es instalado por defecto con el Portal. Los WebServices proveen una amplia gama de funcionalidad, pero no todas las partes de SharePoint se pueden alcanzar desde sus WebServices. En el caso de que sea necesario realizar alguna función que no exista en una de los WebServices por defecto, siempre es posible crear uno propio. La cuarta parte de la serie de artículos sobre WebServices y SharePoint indica los pasos necesarios para crear un WebService que puede utilizar toda la funcionalidad de SharePoint y es integrado con los WebServices por defecto. El código y los primeros pasos para crear el WebService son iguales a los del articulo numero 3 de la serie. WebSite y IIS Cuando cree su propio WebService para SharePoint puede decidir que el servicio ejecute en el mismo sitio en donde WSS/SPS esta instalado, en cuyo caso es necesario excluir la ruta de ejecución del servicio en la Administración Central de SharePoint, o utilizando la herramienta de administración con la siguiente sintaxis: Stsadm.exe o addpath url http[s]://[servidor]/[ruta] type exclusion Por otra parte, si el WebService ejecuta en su propia ruta de IIS, es necesario asignarle un puerto diferente al que utiliza WSS/SPS, normalmente el numero 80. En el ejemplo siguiente se utiliza el primer método, pero los dos sistemas se pueden utilizar sin problemas. Crear un nuevo sitio en IIS Inicie la Administración de Internet Information Services (IIS) y cree un nuevo Directorio Virtual directamente bajo Sitio Web predeterminado. Especifique un Alias y una Ruta de acceso y habilítelo con los permisos por defecto (Leer y Ejecutar). Desde la Administración Central de SharePoint vaya a Configurar opciones de servidor virtual desde la página Lista de servidores virtuales -> elija el Servidor Virtual indicado ->
Definir rutas de acceso administradas -> excluya la ruta de acceso al directorio virtual que acaba de crear. Crear un nuevo proyecto en Visual Studio Inicie Visual Studio y cree un nuevo proyecto del tipo Servicio Web ASP.NET, y en la casilla de Ubicación especifique el nombre del servidor y el directorio virtual a utilizar, tal como se creó en el paso anterior: Si el directorio en donde se ha creado el directorio virtual no tiene suficientes derechos, la siguiente pantalla aparecerá: Acepte para continuar y haga un login utilizando las credenciales de un usuario con suficientes derechos (un administrador, por ejemplo). Elimine el comentario en el código del [WebMethod] en el archivo Service1.asmx.cs para poderlo utilizar directamente.
Compile el proyecto para comprobar que puede ser utilizado. Inicie una pantalla de Internet Explorer, y utilice el URL del WebService ( http://wv01/webservice1/service1.asmx en el ejemplo): Utilizando el vinculo HelloWorld se puede llamar el método programado. Funcionalidad de SharePoint El WebService no utiliza hasta ahora funcionalidad de SharePoint. Para obtener información desde WSS/SPS siga los siguientes pasos; 1 Agregue una referencia a Windows Sharepoint Services 2 Agregue una referencia en el código a using Microsoft.SharePoint y using Microsoft.SharePoint.WebControls 3 Cree un nuevo WebMethod: WebMethod] public string MiHost() string strreturn = string.empty; try SPSite MySite = SPControl.GetContextSite(Context); strreturn = MySite.HostName + " - " + MySite.PortalName + " - " + MySite.Owner.Name; catch(exception ex) strreturn = ex.tostring(); return strreturn;
Y compile el proyecto. Registrar el WebService en SharePoint Crear los archivos disco y wsdl Inicie una pantalla de Símbolo del sistema de Visual Studio.NET 2003. Ejecute el siguiente comando: disco.exe http[s]://[servidor]/[directorio virtual]/[servicio].asmx El comando crea dos archivos service1.disco y service1.wsdl en la ruta del símbolo del sistema ( c:\documents and Settings\Administrador en el ejemplo). Abra los dos archivos creados con un editor ASCII ( Bloc de notas ) y sustituya el renglón: <?xml version="1.0" encoding="utf-8"?> Con el siguiente código: <%@ Page Language="C#" Inherits="System.Web.UI.Page"%> <%@ Assembly Name="Microsoft.SharePoint, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Import Namespace="Microsoft.SharePoint.Utilities" %> <%@ Import Namespace="Microsoft.SharePoint" %> En el archivo.disco reemplace los renglones: <contractref ref="http[s]://[servidor:puerto]/ [directorio virtual]/[servicio].asmx?wsdl" docref="http[s]://[servidor:puerto]/ [directorio virtual]/[servicio].asmx" xmlns="http[s]://schemas.xmlsoap.org/disco/scl/" /> <soap address=http[s]:// [servidor:puerto]/ [directorio virtual]/[servicio].asmx xmlns:q1="http://tempuri.org/" binding="q1:checkinoutsoap" xmlns="http://schemas.xmlsoap.org/disco/soap/" /> Con los siguientes renglones: <contractref ref=<% SPEncode.WriteHtmlEncodeWithQuote(Response, SPWeb.OriginalBaseUrl(Request) + "?wsdl", '"'); %> docref=<% SPEncode.WriteHtmlEncodeWithQuote(Response, SPWeb.OriginalBaseUrl(Request), '"'); %> xmlns="http://schemas.xmlsoap.org/disco/scl/" /> <soap address=<% SPEncode.WriteHtmlEncodeWithQuote(Response, SPWeb.OriginalBaseUrl(Request), '"'); %> xmlns:q1="http://tempuri.org/" binding="q1:checkinoutsoap" xmlns="http://schemas.xmlsoap.org/disco/soap/" /> En el archive.wsdl reemplace el renglón:
<soap:address location="http[s]:// [servidor:puerto]/ [directorio virtual]/[servicio].asmx" /> Con el renglón: <soap:address location=<% SPEncode.WriteHtmlEncodeWithQuote(Response, SPWeb.OriginalBaseUrl(Request), '"'); %> /> Abra el archivo extensions\60\isapi\spdisco.aspx Y añada el renglón <contractref ref=<% SPEncode.WriteHtmlEncodeWithQuote(Response, spweb.url + "/_vti_bin/service1.asmx?wsdl", '"'); %> docref=<% SPEncode.WriteHtmlEncodeWithQuote(Response, spweb.url + "/_vti_bin/service1.asmx", '"'); %> xmlns="http://schemas.xmlsoap.org/disco/scl/" /> <soap address=<% SPEncode.WriteHtmlEncodeWithQuote(Response, spweb.url + "/_vti_bin/service1.asmx", '"'); %> xmlns:q1="http://schemas.microsoft.com/sharepoint/soap/directory/" binding="q1:service1" xmlns="http://schemas.xmlsoap.org/disco/soap/" /> Al final del archivo, precisamente antes del renglón </discovery>. El nombre después de binding= q1: es el nombre de la clase utilizada en el proyecto del WebService. Cambie el nombre de los archivos service1.disco y service1.wsdl por service1disco.aspx y service1wsdl.aspx. Copie los dos archivos a los que se les a acabado de cambiar el nombre, y el archivo Service1.asmx al directorio extensions\60\isapi\ Copie el dll del proyecto ( WebService_4.dll ) al directorio extensions\60\isapi\bin Programa de prueba Cree un programa de prueba como se describe en el primer artículo de esta serie. Incluya una referencia web a http[s]://[servidor]/_vti_bin/service1.asmx. La funcionalidad del WebService es mínima en el ejemplo, pero el programa tiene acceso a todas las funciones y propiedades del API de SharePoint, de tal forma que cualquier tipo de funcionalidad puede ser programada.