2013-06-20 65 views
0

我正在使用PHP SoapClient進行Web服務。PHP SOAPClient WCF發送參數錯誤

WebService的網址是: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打印出以下錯誤信息:

Fatal error: Uncaught SoapFault exception: [a:DeserializationFailed] when i execute the script.

公司給了我一個示例代碼寫在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

您的SOAP客戶端不知道如何反序列化對象令牌。您需要將該令牌對象轉換爲關聯數組,然後將該數組用作操作的參數。

$pin->ObtenerMarcas(get_object_vars($Token),$Entrada); 

我恐怕即使你清除了這個錯誤,你也不會成功地使用該服務。它看起來像肥皂頭中需要一個令牌。您放置的C代碼並不會向您顯示所有內容,它具有封裝在Proxy類中的實現。您需要閱讀文檔,否則您必須閱讀導入的wsdl文件,這些文件嵌入您提供的全球wsdl鏈接中。

+0

它沒有工作, 致命錯誤:未捕獲的SOAPFault異常:[A:DeserializationFailed]格式化引發了異常,而試圖反序列化消息:錯誤在反序列化請求消息的主體進行操作「ObtenerMarcas」。從命名空間'http://schemas.xmlsoap.org/soap/envelope/'預期的結束元素'Body'。從命名空間''找到元素'param1'。 –

+0

是的,我在發送帶標記對象的sap頭文件,但沒有關於它的文檔。 –

+0

值得看看c代理類中的實現。對不起,沒有文件幫助不了多少 – DavidLin