Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1

    Webservice implementato ad Oggetti

    Salve,
    non riesco a trovare esempi su Google, ho fatto un semplice WS in PHP per inviare più Email e funziona molto bene.

    Il mio codice è procedurale come si vede nell'esempio sotto, vorrei implementare un WS ad Oggetti in modo da gestire molte più cose in maniera semplice,

    io sviluppo ad oggetti ma un WS non l'ho mai fatto, non lo so come si implementa ad Oggetti.

    Come potrei trasformare il mio WS ad Oggetti ???


    codice:
    <?
    require_once("lib/nusoap.php");
    $ns = "http://www.mio-sito.it/php_webservice/";
    
    $server = new soap_server();
    $server->configureWSDL('WS_GladiatorMail', $ns);
    $server->wsdl->schemaTargetNamespace = $ns;
    
    //Register Function
    $server->register('SendMail', array(
    									'_sEmails' => 'xsd:string', 
    									'_sSubject' => 'xsd:string', 
    									'_sHtml' => 'xsd:string', 
    									'_sFrom' => 'xsd:string'
    									), 
    									array('return' => 'xsd:string'), $ns);
    
    
    function SendMail($_sEmails, $_sSubject, $_sHtml, $_sFrom)
    {
    	$sResult = '';
    	$aEmail = preg_split("/[|]+/", $_sEmails);
    
    	$sHeader .= "From: <$_sFrom>\n";
    	$sHeader .= "X-Mailer: PHP/".phpversion()."\n";
    	$sHeader .= "MIME-Version: 1.0\n";
    	$sHeader .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
    	$sHeader .= "Content-Transfer-Encoding: 7bit\n\n";
    
    	foreach($aEmail as $sEmail)
    	{
    		if($sEmail != '')
    		{
    			if(!mail($sEmail, $_sSubject, $_sHtml, $sHeader))
    			{
    				$sResult .= "|$sEmail";
    			}
    		}
    	}
    
    	return new soapval('return', 'xsd:string', substr($sResult, 1, strlen($sResult)));
    }
    
    
    $server->service($HTTP_RAW_POST_DATA);
    ?>

  2. #2
    io sviluppo ad oggetti ma un WS non l'ho mai fatto, non lo so come si implementa ad Oggetti.
    chissà perchè ma mi pare una contraddizione questa affermazione... Comunque così banalmente avrai un oggetto Server che si preoccuperà di configurare soap_server in maniera corretta, importare wsdl e quant'altro, caricare (se necessario) l'oggetto/gli oggetti delegati all'handling delle funzioni esposti nel wsdl, e un metodo run per avviare il server...

    cmq nel manuale come secondo esempio degli utenti c'è quello che chiedi te: http://php.net/manual/en/class.soapserver.php
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Tu intendi l'esempio: Another simple example for SOAP_SERVER with errorhandling an params and wsdl:

    ma non usa nusoap ma SOAP, devo scaricare le librerie o classi e rifare tutto allora ?

    è migliore in quel modo ?

    P.S. il mio Client poi è in C#

    ho provato altri esempi e mi dava un erorre per aggiungere il Riferimento Web, diceva che non era un formato corretto l'Output...

  4. #4
    Originariamente inviato da w_t
    Tu intendi l'esempio: Another simple example for SOAP_SERVER with errorhandling an params and wsdl:

    ma non usa nusoap ma SOAP, devo scaricare le librerie o classi e rifare tutto allora ?

    è migliore in quel modo ?

    P.S. il mio Client poi è in C#

    ho provato altri esempi e mi dava un erorre per aggiungere il Riferimento Web, diceva che non era un formato corretto l'Output...
    ma non guardare alle librerie che usa, guarda all'esempio.... ps: al client non interessa com'è fatto il server, basta che parli soap
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    ti capisco ma io non riesco a tradurre il mio codice, non basta che faccio come nell'esempio, non mi vede la classe, non so come fare per registrarla ....

    codice:
    //Register Function
    $oServer->register('SendMail', array(
    									'_sEmails' => 'xsd:string', 
    									'_sSubject' => 'xsd:string', 
    									'_sHtml' => 'xsd:string', 
    									'_sFrom' => 'xsd:string'
    									), 
    									array('return' => 'xsd:string'), $sNamespace);
    
    class MyClass
    {
    	function SendMail($_sEmails, $_sSubject, $_sHtml, $_sFrom)
    	{
    		$sResult = '';
    	
    		$aEmail = preg_split("/[|]+/", $_sEmails);
    	
    		$sHeader .= "Fromx: <$_sFrom>\n";
    		$sHeader .= "X-Mailer: PHP/".phpversion()."\n";
    		$sHeader .= "MIME-Version: 1.0\n";
    		$sHeader .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
    		$sHeader .= "Content-Transfer-Encoding: 7bit\n\n";
    	
    		foreach($aEmail as $sEmail)
    		{
    			if($sEmail != '')
    			{
    				if(!mail($sEmail, $_sSubject, $_sHtml, $sHeader))
    				{
    					$sResult .= "|$sEmail";
    				}
    			}
    		}
    	
    		return new soapval('return', 'xsd:string', substr($sResult, 1, strlen($sResult)));
    	}
    }

  6. #6
    qualcosa del tipo:

    http://stackoverflow.com/questions/4...-method-naming

    non ho trovato la documentazione della libreria, vedi di trovarla e leggerla... oppure leggi il source della classe per vedere come lavora...
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  7. #7
    w_t, scusa la domanda che c'entra poco con il tuo problema, ma perché usi soap?

    Non ti converrebbe un webservice rest che risponde in XML/JSON? (una volta che hai i dati della risposta li puoi serializzare in json o in xml senza problemi di sorta)

    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  8. #8
    Originariamente inviato da daniele_dll
    w_t, scusa la domanda che c'entra poco con il tuo problema, ma perché usi soap?

    Non ti converrebbe un webservice rest che risponde in XML/JSON? (una volta che hai i dati della risposta li puoi serializzare in json o in xml senza problemi di sorta)

    Uso soap perceh non ho mai messo mano ad un WS e un mio conoscente mi ha detto che è facile iniziare con SOAP....

    tutto qui !!

    Se mi guidi verso una soluzione migliore la prendo al volo, non è un esperto quello che mi ha detto quella cosa.

    Il mio utilizzo è il seguente:
    ----------------------------------
    Ho un Client "Win Form" sviluppato in C# per inviare Newsletter,
    - tutto il DB sta lato Client
    - voglio costruire un WS dove più Client connettono e inviano le Newsletter
    - questo WS dovrà inviare MIN 3.000 email al giorno / MAX 20.000 email al giorno
    - il Server SMTP è di proprieta su macchina dedicata (quindi accetta tutto quello che gli mando)
    - il WS dovrà rimandarmi come risposta tutte le e-mail non inviate

    Conclusioni:
    --------------------
    devo mandare al WS una stringa contenente:
    20.000 email +
    Mittente +
    Oggetto +
    Messaggio HTML il quale è una intera pagina HTML


    Detto tutto questo cosa mi consigli ???

  9. #9
    ehm ... le parole "facile" e "soap" non vanno molto d'accordo soprattutto considerato che ti serve anche un WSDL per non uscire scemo

    quello che dovrà fare il webservice non cambia minimamente, il funzionamento è lo stesso ... quello che cambia è l'involucro esterno

    personalmente preferisco passare i valori in get o in post (per uniformità generalmente in post) e poi costruisco un oggetto per la risposta e rispondo in json (www.php.net/json_encode)

    dal lato C# ci sono un sacco di librerie per decodificare la risposta JSON

    ma, se non volessi usare JSON ... puoi sempre usare XML ^^

    PS: nusoap e C# non vanno assolutamente per niente d'accordo (la mia esperienza con questa combinazione risale ad un annetto fa) ... se vuoi usare comunque soap ti consiglio di utilizzare le funzioni native di php e/o la libreria soap/wsdl dello zend framework (richiami solo quella)
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  10. #10
    Scusa la mia ignoranza,
    ora dopo il consiglio di Santino83_02 il mio Script è il seguente:

    codice:
    <?
    require_once("lib/nusoap.php");
    $sNamespace = "http://127.0.0.1/my-project/";
    
    $oServer = new soap_server();
    $oServer->configureWSDL('MyWebService', $sNamespace);
    $oServer->wsdl->schemaTargetNamespace = $sNamespace;
    
    //Register Function
    $oServer->register(MyClass.SendMail', array(
    													'_sEmails' => 'xsd:string', 
    													'_sSubject' => 'xsd:string', 
    													'_sHtml' => 'xsd:string', 
    													'_sFrom' => 'xsd:string'
    													), 
    													array('return' => 'xsd:string'), $sNamespace);
    
    class MyClass
    {
    	private $m_sResult;
    	
    	
    	function SendMail($_sEmails, $_sSubject, $_sHtml, $_sFrom)
    	{
    		$this->m_sResult = '';
    	
    		$aEmail = preg_split("/[|]+/", $_sEmails);
    	
    		$sHeader .= "From: <$_sFrom>\n";
    		$sHeader .= "X-Mailer: PHP/".phpversion()."\n";
    		$sHeader .= "MIME-Version: 1.0\n";
    		$sHeader .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
    		$sHeader .= "Content-Transfer-Encoding: 7bit\n\n";
    	
    		foreach($aEmail as $sEmail)
    		{
    			if($sEmail != '')
    			{
    				if(!mail($sEmail, $_sSubject, $_sHtml, $sHeader))
    				{
    					$this->m_sResult .= "|$sEmail";
    				}
    			}
    		}
    	
    		return new soapval('return', 'xsd:string', substr($this->m_sResult, 1, strlen($this->m_sResult)));
    	}
    }
    
    
    $oServer->service($HTTP_RAW_POST_DATA);
    ?>
    il quale Script in C# lo richiamo cosi:

    codice:
    using MyNewsletter.MyWebService;
    
    
    MyWebService ws = new MyWebService();
    
    string sResult = ws.MyClassSendMail(sEmailTo, sOggetto, sHtmlDocument, sMittenteSelezionato);
    mi sembra abbastanza facile???

    Perche devo usare una codifica ??
    Non comunicano gia in maniera Cifrata ??

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.