我正在创建一个小型 Web 服务,但在将一组对象从 C# 应用程序发送到 Web 服务时遇到问题。我在 C# 中创建了一个具有不同属性的对象,其中一个属性是另一种对象的数组。C# 方面似乎工作正常,但在 PHP 方面却没有成功。对象以所有属性到达服务,但数组始终为空。
我在这里做错了什么?
我的 WSDL 中的类型
<types>
<xsd:schema targetNamespace="http://localhost//soap/myService.wsdl">
<xsd:complexType name="SubObject">
<xsd:sequence>
<xsd:element name="VAL1" type="xsd:integer" />
<xsd:element name="VAL2" type="xsd:string" />
<xsd:element name="VAL3" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
<xsd:schema targetNamespace="http://localhost/soap/myService.wsdl">
<xsd:complexType name="TestObject">
<xsd:sequence>
<xsd:element name="PROP1" type="xsd:integer" />
<xsd:element name="PROP2" type="xsd:string" />
<xsd:element name="PROP3" type="xsd:string" />
<xsd:element name="MyArray" type="tns:SubObject" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</types
我在 C# 中做什么:
MyService.Test_PortTypeClient client = new MyService.Test_PortTypeClient();
MyService.TestObject curObject = new MyService.TestObject();
curObject.PROP1= 12345;
curObject.PROP2= "test";
curObject.PROP3= "test";
curObject.MyArray = new MyService.SubObject[1];
curObject.MyArray[0] = new MyService.SubObject();
curObject.MyArray[0].VAL1 = 12345;
curObject.MyArray[0].VAL2 = "test";
curObject.MyArray[0].VAL2 = "test";
client.SaveObject(curObject);
来自 C# 应用程序的对象的 print_r:
stdClass Object
(
[PROP1] => 12345
[PROP2] => "test"
[MyArray] => stdClass Object
(
)
[PROP3] => "test"
)
服务器.php
function SaveProduct($object) {
// Save
}
ini_set("soap.wsdl_cache_enabled", "0");
$server = new SoapServer('myService.wsdl');
$server->addFunction("SaveObject");
$server->handle();