我正在使用PHP SoapClient开发Web服务。
网络服务网址为:http://web.abaseguros.com/AutoConnect/ACCatalogos.svc?wsdl
这是我的代码:
<?php
ini_set("soap.wsdl_cache_enabled", "0");
$pin = new SoapClient("http://web.abaseguros.com/AutoConnect/ACCatalogos.svc?wsdl");
class Token {
var $usuario;
var $password;
function Token($user,$pass) {
$this->usuario = $user;
$this->password = $pass;
}
}
//User and Password for the token object
$Token = new Token('usuarioWCF','Pa$$w0rd');
//XML 'Entrada' String
$Entrada = "<CAT><NEG>5786</NEG></CAT>";
$result = $pin->ObtenerMarcas($Token,$Entrada);
但PHP打印出以下错误消息:
致命错误:当我执行脚本时,未捕获的SoapFault异常:[a:DeserializationFailed]。
公司给了我一个用C#编写的示例代码
private void Obtener_Catalogo_ABASeguros()
{
string strEntrada, strSalida;
strEntrada = “<CAT><NEG>5786</NEG></CAT>“; +
ACCatalogosClient proxy = new ACCatalogosClient();
Token token = new Token();
token.usuario = "usuarioWCF";
token.password = "Pa$$w0rd";
try
{
strSalida = proxy.ObtenerMarcas(token, strEntrada);
}
catch (FaultException<Error> ex)
{
txtCotSalida.Text = string.Format("Ocurrio un error en el WCF:\n " +
"Origen: {0}\n "+
"Mensaje: {1}\n "+
"Stack: {2}", ex.Detail.Origen, ex.Detail.Mensaje, ex.Detail.StackTrace);
}
但是我仍然无法理解如何在两种语言上发送参数。
任何帮助?
答案 0 :(得分:0)
您的Soap客户端不知道如何反序列化对象令牌。您需要将该令牌对象转换为关联数组,并将该数组用作操作的参数。
$pin->ObtenerMarcas(get_object_vars($Token),$Entrada);
我担心即使您清除此错误,您也无法成功使用该服务。看起来肥皂头中需要一个令牌。您放置的C代码并未向您显示所有内容,它具有封装在Proxy类中的实现。您需要阅读文档,否则您必须阅读所提供的全局wsdl链接中嵌入的导入的wsdl文件。