Context.
I have a a web service implementation in .net with WCF and publish in a SSL channel, and i want to call this WS from a client in PHP.
I tried install WSF from WSO2 and it's impossible i have an error API PHP it's diferent to API WSO2 and dont load the wsf.dll. it's a nightmare.
And so, implement a SOAPclient but i find errors that
The message with To '' cannot be
processed at the receiver, due to an AddressFilter mismatch at the
EndpointDispatcher. Check that the sender and receiver's
EndpointAddresses agree.
thanks to
http://blogs.msdn.com/b/nabeelp/archive/2008/03/07/obscure-error-addressfilter-mismatch-at-the-endpointdispatcher.aspx
i find the solution
class Soap {
public $proxy=null;
public function Soap($myAction){
$this->proxy = new My_SoapClient("https://www.domain.eu/Service.svc?wsdl",
array(
'trace' => 1,
'soap_version' => SOAP_1_2 ,
'SOAPAction'=> $myAction ,
'location'=>'https://www.domain.eu/Service.svc'
)
);
//create a Head soap message to connect with WCF
$actionHdr[] = new SoapHeader("http://www.w3.org/2005/08/addressing", 'Action', $myAction);
$actionHdr[] = new SoapHeader("http://www.w3.org/2005/08/addressing", 'To', 'https://www.domain.eu/Service.svc', 1);
$this->proxy->__setSoapHeaders($actionHdr);
}
}
class My_SoapClient extends SoapClient {
protected $_response = null;
// overwrite SoapClient send message
public function __doRequest( $request, $location, $action, $version, $one_way = nul) {
$curl = curl_init($location);
$headers = array(
"Content-type:application/soap+xml;charset=\"utf-8\"",
"Accept: text/xml",
"Cache-Control: no-cache",
"Pragma: no-cache",
"SOAPAction: ". $action,
);
//http://php.net/manual/en/function.curl-setopt.php
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2);//dont change this value. read the link
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
// list of trush Certificate. only work in absolute path... i dont know
curl_setopt($curl,CURLOPT_CAINFO,'Cert.pem');
curl_setopt($curl,CURLOPT_VERBOSE,false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
$response = curl_exec($curl);
if (curl_errno($curl)) {
throw new Exception(curl_error($curl));
}
curl_close($curl);
if (!$one_way) {
return ($response);
}
}
}
//and for each operation, implements
class OperationOne{
public $soap=null;
public function Request(){
$this->soap = new Soap('https://www.domain.eu/OperationOne);
}
}
//to make the invoke
$operationOne = new OperationOne();//create soap message
$parametreOut= $operationOne->soap->proxy->openSessionOperation($parameterIn);
solo-net
viernes, 29 de junio de 2012
miércoles, 27 de junio de 2012
Generacion de WSDL en un domino y el servicio está hostepado en una maquina local
Cuando tienes un servicio creado con WCF y se generan los ficheros WSDL, si el servicio esta en una maquina local y lo que quieres hacer es que se publique contra un dominio especifico tienes que hacer lo siguiente
1.- En mi caso no tenia instaladas las herramientas administrativas del IIS 7 y estas se instalan Panel de control\Todos los elementos de Panel de control\activar desactivar las caracteristicas de windows
2. - Sacar la consola cmd en modo administrativo y lanzar el
siguiente comando
%systemroot%\system32\cscript.exe //nologo c:\inetpub\AdminScripts\adsutil.vbs set /w3svc/NUMERO/SecureBindings :443:www.dominiopublico.es
Donde numero es el ID del servidor del IIS seguro, en mi caso el número = 2
3.- reiniciar el IIS con la instrucción
Si no funciona se puede volver al estado anterior ejecutando
%systemroot%\system32\cscript.exe //nologo c:\inetpub\AdminScripts\adsutil.vbs set /w3svc/NUMERO/SecureBindings :443:
[1]http://www.jstawski.com/archive/2008/05/01/wcf-wsdl-location-address-with-https.aspx
[2]http://www.codemeit.com/wcf/wcf-wsdl-xsdimport-schemalocations-link-to-local-machine-name-not-domain-name-while-hosted-in-iis.html
1.- En mi caso no tenia instaladas las herramientas administrativas del IIS 7 y estas se instalan Panel de control\Todos los elementos de Panel de control\activar desactivar las caracteristicas de windows
%systemroot%\system32\cscript.exe //nologo c:\inetpub\AdminScripts\adsutil.vbs set /w3svc/NUMERO/SecureBindings :443:www.dominiopublico.es
Donde numero es el ID del servidor del IIS seguro, en mi caso el número = 2
3.- reiniciar el IIS con la instrucción
iisreset
Si no funciona se puede volver al estado anterior ejecutando
%systemroot%\system32\cscript.exe //nologo c:\inetpub\AdminScripts\adsutil.vbs set /w3svc/NUMERO/SecureBindings :443:
[1]http://www.jstawski.com/archive/2008/05/01/wcf-wsdl-location-address-with-https.aspx
[2]http://www.codemeit.com/wcf/wcf-wsdl-xsdimport-schemalocations-link-to-local-machine-name-not-domain-name-while-hosted-in-iis.html
lunes, 28 de mayo de 2012
memory file, fichero en memioria
Como crear un fichero en la memoria
How to make a file in memory
byte[] bin = new byte[1024*1000];
System.IO.MemoryStream men = new System.IO.MemoryStream(bin);
men it's a file to write o read
How to make a file in memory
byte[] bin = new byte[1024*1000];
System.IO.MemoryStream men = new System.IO.MemoryStream(bin);
men it's a file to write o read
serialize desserialize xml2Datatable and dataTable2xml
Como pasar, convertir, trasformar de xml a datatable y de datatable a xml,
convert transform, Serialize datatable to xml and deserialize xml to datatable
private void xml2DataTable()
{
XmlDocument xmlAPDP = new XmlDocument();
xmlAPDP.LoadXml(_xmlSource);
dataSet = new DataSet();
using (XmlReader xmlReader = new XmlNodeReader(xmlAPDP))
{
dataSet.ReadXml(xmlReader, XmlReadMode.ReadSchema);
xmlReader.Close();
}
this._dataTable = dataSet.Tables[0];
}
private void dataTable2Xml()
{
StringBuilder sb;
StringWriter sw;
sb = new StringBuilder();
sw = new StringWriter(sbSQL);
_dataTable.WriteXml(sw, XmlWriteMode.WriteSchema);
_xmlSource = sb.ToString();
}
convert transform, Serialize datatable to xml and deserialize xml to datatable
private void xml2DataTable()
{
XmlDocument xmlAPDP = new XmlDocument();
xmlAPDP.LoadXml(_xmlSource);
dataSet = new DataSet();
using (XmlReader xmlReader = new XmlNodeReader(xmlAPDP))
{
dataSet.ReadXml(xmlReader, XmlReadMode.ReadSchema);
xmlReader.Close();
}
this._dataTable = dataSet.Tables[0];
}
private void dataTable2Xml()
{
StringBuilder sb;
StringWriter sw;
sb = new StringBuilder();
sw = new StringWriter(sbSQL);
_dataTable.WriteXml(sw, XmlWriteMode.WriteSchema);
_xmlSource = sb.ToString();
}
jueves, 27 de octubre de 2011
Infracción de simultaneidad: UpdateCommand afectó a 0 de los 1 registros esperados.
Llevo un buen rato con este error... al final me he dado cuenta porque era. Tengo una tabla con un campo precalculado (getDate()) Cuando inserto en DotNet no tengo ningun problema, pero cuando realizo una actualizacion, el campo al ser una formula no coincide con el valor de la tabla por lo que da este error. La única solución que veo es eliminar la fórmula y hacerlo a través de DotNet
martes, 25 de octubre de 2011
Tablas relacionadas en DotNet
Cuando hacemos el típico diseño de base de datos donde hay una tabla maestra la cual tiene una clave, se relaciona con una tablas externas 1.. N y además tiene un conjunto de tablas con solo relaciones N..N. No sabemos muy bien como empezar en DotNet.
Lo primero que hacemos es el disño de la base de datos. Este lo podemos realizar en SQL Express. A partir de aqui creamos en DotNet un nuevo objeto dataSet, y arrastramos desde el visor de tablas del Visual Studio 2010 las tabla. Automaticamente nos creará objetos Adapter y DataSet. No modificar estos objetos, ya que si cambiamos el diseño de nuestra base de datos perderemos los cambios.
Lo primero que hacemos es el disño de la base de datos. Este lo podemos realizar en SQL Express. A partir de aqui creamos en DotNet un nuevo objeto dataSet, y arrastramos desde el visor de tablas del Visual Studio 2010 las tabla. Automaticamente nos creará objetos Adapter y DataSet. No modificar estos objetos, ya que si cambiamos el diseño de nuestra base de datos perderemos los cambios.
lunes, 17 de octubre de 2011
Model Vew controler
Para crear una sencilla Web con el típico CRUDEL, en Visual Studio 2010 y MS-SQL 2008 express es tan fácil como crear un nuevo proyecto MVC seleccionar una base de datos y agregarla al proyecto generera el model a partir de la base de datos. Si se modifica el modelo desde VS se pueden ejecutar las actualizaciones en el propio VS. Para crear una nueva vista se pincha en el controlador agregamos una vista y el nombre que le demos se la asociamos con un nuevo nombre de funcion en la vista.
Suscribirse a:
Entradas (Atom)
