Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Confusion con nusoap

Estas en el tema de Confusion con nusoap en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Tengo un WebService hecho con nusoap y consumido desde C#.. basicamente tengo una funcion que se llama uploadarchivo que tiene como parametros: $buffer // el ...
  #1 (permalink)  
Antiguo 09/01/2007, 11:32
Avatar de erlingfiallos  
Fecha de Ingreso: febrero-2005
Ubicación: Mexico ahora
Mensajes: 499
Antigüedad: 19 años, 2 meses
Puntos: 9
Exclamación Confusion con nusoap

Tengo un WebService hecho con nusoap y consumido desde C#.. basicamente tengo una funcion que se llama uploadarchivo que tiene como parametros:

$buffer // el resultado en formato binario del archivo
$filename // el nombre del archivo

Obviamente con un cliente de php funciona muy bien.. pero con un cliente de c# no quiere funcionar..

---------------------------
Error
---------------------------
El cliente encontró el tipo de contenido de respuesta 'text/html', pero se esperaba 'text/xml'.

Alguien sabe como puedo cambiar la respuesta a xml.. porq creo que ahi tengo el error.
  #2 (permalink)  
Antiguo 09/01/2007, 13:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Confusion con nusoap

pues sin ver codigo ni nada, lo que puedes hacer es usar la funcion header()

Código PHP:
header"Content-type: text/xml" ); 
  #3 (permalink)  
Antiguo 09/01/2007, 17:18
Avatar de erlingfiallos  
Fecha de Ingreso: febrero-2005
Ubicación: Mexico ahora
Mensajes: 499
Antigüedad: 19 años, 2 meses
Puntos: 9
Re: Confusion con nusoap

la funcion header lo que haria es regresar la cabecera para impresion en pantalla.. y lo que deberia de hacer es regresar el xml tal y como se supone que lo hace la libreria.. por lo que creo que eso no seria una salida..

El codigo de mi cliente es:

Cita:
private void btnupload_Click(object sender, EventArgs e)
{
string n_archivo = txtpath.Text;
try
{
System.IO.BinaryReader BinRead = new System.IO.BinaryReader(System.IO.File.Open(n_archi vo, System.IO.FileMode.Open, System.IO.FileAccess.Read));
WS.Credentials = System.Net.CredentialCache.DefaultCredentials;
BinRead.BaseStream.Position = 0;
txtrespuesta.Text = Convert.ToString(BinRead.BaseStream.Length);
byte[] buffer = BinRead.ReadBytes(Convert.ToInt32(BinRead.BaseStre am.Length));
BinRead.Close();

//WS.UploadArchivo(buffer, nombre_archivo);
WS.UploadArchivo(Convert.ToString(buffer), nombre_archivo);
}
catch (Exception exec)
{
MessageBox.Show(this, exec.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Y el codigo de mi servidor es el siguiente:

Código PHP:
<?php

// Nota : Se debe tener desactivado el modulo php_soap
// ademas la variable allow_call_time_pass_reference debe estar en On

require_once('nusoap/nusoap-0.7.2/lib/nusoap.php');
$namespace 'http://'.$_SERVER["SERVER_NAME"].$_SERVER["SCRIPT_NAME"];
$servidor = new soap_server;

$servidor->configureWSDL('Service',$namespace);
$servidor->wsdl->schemaTargetNamespace $namespace;

//Aqui se declaran los metodos que son publicos
$servidor->register(
    
'Hola',                                // nombre del metodo
    
array('nombre' => 'xsd:string'),    // parametros de entrada
    
array('return' => 'xsd:string'),    // parametros de salida
    
'uri:Service',                      // namespace
    
'uri:Service/Hola',                    // SOAPAction
    
'rpc',                                // style
    
'encoded'                            // use
);

$servidor->register(
    
'DownloadArchivo',
    array (
'filename' => 'xsd:string'),
    array (
'return' => 'xsd:string'),
    
'uri:Service',
    
'uri:Service/DownloadArchivo',
    
'rpc',
    
'encoded'
);

$servidor->register(
    
'UploadArchivo',
    array (
'buffer' => 'xsd:string','filename' => 'xsd:string'),
    array (
'return' => 'xsd:string'),
    
'uri:Service',
    
'uri:Service/DownloadArchivo',
    
'rpc',
    
'encoded'
);

$ArchivosEncontrados = array ('Encontrados' => '');

function 
Hola($nombre){
    return 
"Hola ".$nombre." Webservice funcionando al 100%";
}

function 
DownloadArchivo($filename) {
    
$file "images/".$filename;        
    
$picture fread(fopen($file,"rb"0),filesize($file));
    
$base64 chunk_split(base64_encode($picture));
                  
    return 
$base64;
}

function 
UploadArchivo($buffer$filename) {
    
$directorio "images/";
    
$data base64_decode($buffer);
    
$im imagecreatefromstring($data);
    
imagejpeg($im,$directorio.$filename);
    
imagedestroy($im);
    
    return;
}

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA '';
$servidor->service($HTTP_RAW_POST_DATA);
  #4 (permalink)  
Antiguo 09/01/2007, 18:30
Avatar de erlingfiallos  
Fecha de Ingreso: febrero-2005
Ubicación: Mexico ahora
Mensajes: 499
Antigüedad: 19 años, 2 meses
Puntos: 9
Re: Confusion con nusoap

Yaa.. olvidenlo.. problema solucionado..

yo estaba haciendo esto:
WS.UploadArchivo(Convert.ToString(buffer), nombre_archivo);

y lo correcto era esto:
WS.UploadArchivo(Convert.ToBase64String(buffer), nombre_archivo);

Ahora al intentan hacer lo mismo pero usando un Webservice creado con C# con un cliente de PHP.. aparece este error..


Código:
Array
(
    [faultcode] => soap:Client
    [faultstring] => System.Web.Services.Protocols.SoapException: El servidor no reconoció el valor del encabezado HTTP SOAPAction: .
   en System.Web.Services.Protocols.Soap11ServerProtocolHelper.RouteRequest()
   en System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message)
   en System.Web.Services.Protocols.SoapServerProtocol.Initialize()
   en System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response)
   en System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)
    [detail] => 
)
y lo unico que hago es llamar a una Fx llamada Hola(string nombre) que retorna una cadena+nombre
  #5 (permalink)  
Antiguo 05/04/2007, 12:13
 
Fecha de Ingreso: abril-2007
Mensajes: 2
Antigüedad: 17 años
Puntos: 0
Re: Confusion con nusoap

Amigo le pediria de favor si tiene el ejemplo de como consumir el web service desde un cliente en PHP...

para las funcionalidades de Upload y download file , pues estoy estudiando sobre los web services para el trabajo de Tesis de mi especialidad y me serian de gran ayuda, pues entendi perfecto el codigo del serveridor del web service....

Help ................

Saludos Afectuosos........
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:55.