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,只是希望得到這個作爲開發該網站的人的例子。