[英]How can I pass a DateTime object to a Soap web service written with C# from PHP?
[英]how to send an object to C# WCF service from PHP using SOAP
我在從PHP發送WCF Web服務中發送定義為datacontract的自定義對象時遇到問題。 我正在嘗試通過SOAP完成此操作。
這是dataContract的樣子:
[DataContract]
public class simplyCustomer
{
[DataMember]
public int id;
[DataMember]
public string name;
[DataMember]
public string contact;
[DataMember]
public string street1;
[DataMember]
public string street2;
[DataMember]
public string city;
[DataMember]
...
}
因此,我有一個函數,它在WCF服務上將simpleCustomer作為參數。 php可以使用返回一個函數的另一個函數來接收simplyCustomer
。 但是,如果我使用PHP中的以下代碼調用接受它的代碼:
$retVal = $simplyService->__soapCall("addCustomer",array('parameters'=>$params));
此調用生成的SOAP信封使對象為NULL,從而導致WCF服務抱怨存在null引用。
這是生成的信封:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/"><SOAP-ENV:Body><ns1:addCustomer/></SOAP-ENV:Body></SOAP-ENV:Envelope>
參數應該在addCustomer
所在的addCustomer
,但那里什么也沒有。
任何幫助將不勝感激!
謝謝!
盡管這是之前提出的問題,但自從我提出相同問題以來,就想添加我的意見。
假設您的運營合同看起來類似於
[OperationContract]
public <return_type> addCustomer(simplyCustomer parameters);
考慮到$ params在初始化時設置了所有必需的值並且變量名與數據協定完全相似,因此您建議的內容應該起作用。
盡管有一些技巧可以解決。
1)如果您已成功將對象發送到服務,則可以檢查服務日志以查看出了什么問題。
2)只需檢查您的構造函數即可查看所有參數。
3)檢查肥皂客戶端是否已初始化並正確使用也很好。
例如:(以下是眾多可能性之一)
$client = new Client( $baseUrl, array('soap_version' => SOAP_1_1,));
$result = $client->addCustomer(array("parameters" => $params ));
我有同樣的問題。 不能看到你如何建立你的$ params,但我這樣做來解決了我的問題:
$username = "test";
$password = "test";
$input = array ("composite" => array("Password" => $password, "UserName" => $username));
$result=$client->__SoapCall('AuthenticateUser',array('parameters'=>$input));
我的服務方法如下所示
[OperationContract]
AuthenticationData AuthenticateUser(AuthenticationData composite);
弄清楚如何制作肥皂的東西時,使用Fiddler是一個很好的幫助
在構建私人項目時,我遇到了同樣的問題。
我的解決方案是使用T4生成服務合同和數據合同代理,也許您覺得它有用。 如果您有任何疑問,請給我發消息,模板尚未經過全面測試。
您可以在github上找到模板,包括樣本servicecontracts / datacontracts:
https://github.com/schaermu/wcf-phpclient-t4
隨時分叉該項目!
干杯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.