2014-12-25 112 views
0

目前我正在使用WSHttpBinding的WCF服務。到目前爲止,該服務在.NET應用程序中運行良好但是,當涉及到在PHP中使用此服務時,它會引發錯誤。該錯誤是由於PHP將null作爲參數發送給WCF服務而導致的。使用WSHttpBinding調用WCF服務

服務合同看起來如下:

[ServiceContract] 
public interface IWebsite : IWcfSvc 
{ 
    [OperationContract] 
    [FaultContract(typeof(ServiceException))] 
    ResponseResult LostPassword(RequestLostPassword request); 
} 

所使用的參數的數據合約的樣子:

[DataContract] 
public class RequestLostPassword 
{ 
    [DataMember(IsRequired = true)] 
    public string Email { get; set; } 

    [DataMember(IsRequired = true)] 
    public string NewPassword { get; set; } 

    [DataMember(IsRequired = true)] 
    public string CardNumber { get; set; } 

    [DataMember(IsRequired = true)] 
    public DateTime RequestStart { get; set; } 
} 

因爲我不是專家,我花了一段時間來得到的PHP代碼工作,但我最終寫了這樣的腳本:

$parameters = array(
    'Email' => "[email protected]", 
    'NewPassword' => "test", 
    'CardNumber' => "1234567890", 
    'RequestStart' => date('c') 
); 

$svc = 'Website'; 
$port = '10007'; 
$func = 'LostPassword'; 
$url = 'http://xxx.xxx.xxx.xxx:'.$port.'/'.$svc; 

$client = @new SoapClient(
    $url."?wsdl", 
    array(
     'soap_version' => SOAP_1_2, 
     'encoding'=>'ISO-8859-1', 
     'exceptions' => true, 
     'trace' => true, 
     'connection_timeout' => 120 
    ) 
); 

$actionHeader[] = new SoapHeader(
    'http://www.w3.org/2005/08/addressing', 
    'Action', 
    'http://tempuri.org/I'.$svc.'/'.$func, 
    true 
); 

$actionHeader[] = new SoapHeader(
    'http://www.w3.org/2005/08/addressing', 
    'To', 
    $url, 
    true 
); 

$client->__setSoapHeaders($actionHeader); 
$result = $client->__soapCall($func, array('parameters' => $parameters)); 

我什麼也沒有刪除這就是爲什麼它沒有將參數傳遞給WCF服務。我有另一種服務,雖然不需要參數,但工作得很好。有人能解釋爲什麼發生這種情況嗎我是一個完整的PHP noob,只是希望得到這個作爲開發該網站的人的例子。

回答

1

我們找到了答案! 的下面代碼行:

$result = $client->__soapCall($func, array('parameters' => $parameters)); 

應改爲:

$result = $client->__soapCall($func, array('parameters' => array('request' => $parameters))); 

顯然,你需要告訴PHP,你的參數是嵌套在一個名爲「請求」的數組,這是嵌套在數組稱爲參數,當你想調用一個帶有datacontract的WCF服務作爲請求對象時。

相關問題