Hola,
tengo una base de datos en SQL Server 2008 a la que quiero acceder desde un programa en PHP que corre en un servidor Linux. Por razones de seguridad decidimos que convenía hacer un Webservice en el servidor SQLserver.
Siguiendo tutoriales, primero hice un SP y luego un ENDPOINT, los que transcribo
el SP es
------------------------------------------------------------------
USE [basededatos]
GO
/****** Object: StoredProcedure [dbo].[c_cons_int] Script Date: 04/06/2011 13:56:17 ******/
[...]
CREATE PROCEDURE [dbo].[c_cons_int]
<Default_Value_For_Param2, , 0>
AS
BEGIN
SELECT nro_internet from int_internet
where nro_internet=4377 OR nro_internet=4378
END
-------------------------------------------------------
o sea, un simple SELECT sin parámetros
Ahora el ENDPOINT
-----------------------------------------------------
CREATE ENDPOINT [DatosInternet]
AUTHORIZATION [sa]
STATE=STARTED
AS HTTP (
PATH=N'/internet',
PORTS = (CLEAR),
AUTHENTICATION = (NTLM, KERBEROS, INTEGRATED),
SITE=N'192.168.2.2',
CLEAR_PORT = 80,
COMPRESSION=DISABLED)
FOR SOAP (
WEBMETHOD 'Datos'(
NAME=N'[basededatos].[dbo].[c_cons_int]'
, SCHEMA=STANDARD
, FORMAT=ALL_RESULTS
),
BATCHES=DISABLED,
WSDL=N'[master].[sys].[sp_http_generate_wsdl_defaultcomplexorsimple]',
SESSIONS=DISABLED,
SESSION_TIMEOUT=60,
DATABASE=N'basededatos',
NAMESPACE=N'HTTP://192.168.2.2/',
SCHEMA=STANDARD,
CHARACTER_SET=XML)
------------------------------------
Por último, el PHP resumido empleado para acceder (tuve que ingresar algunas librerías para poder usar NTLM, pero el resultado era el mismo con SSL y autenticación DIGEST)
<?php
$client=new SoapClient("http://192.168.2.2internet?wsdl",array('login'=>"user",'p assword'=>"pass",'
echo "<pre>";
print_r($client->Datos());
echo "</pre>";
?>
Obtengo respuesta, sí. ¿Cuál es el problema? que la respuesta es esta:
stdClass Object
(
[DatosResult] => stdClass Object
(
[SqlRowSet] => stdClass Object
(
[schema] => Array
(
[0] =>
[1] =>
)
[any] => 4377 4378
)
[SqlRowCount] => stdClass Object
(
[Count] => 2
)
[SqlResultCode] => 0
)
)
Es decir, que los datos vienen como un único string en [any] y así no me sirve.
He probado variantes como ponerle en el SP "FOR XML AUTO, ELEMENTS" pero deja de funcionar.
Posteo en este foro porque estoy segura de que el problema es la generación del WSDL
Alguna idea?
Gracias
?>