У меня есть служба SOAP, которая возвращает массив сложного типа. Определение в NuSOAP в PHP выглядит следующим образом:C# неправильный синтаксический анализ массива из SOAP
// The type itself
$server->wsdl->addComplexType(
"Clip",
"complexType",
"struct",
"all",
"",
array(
"Id" => array(
"name" => "id",
"type" => "xsd:int"
)
// ---snip---
)
);
// The type of the array
$server->wsdl->addComplexType(
"ClipList",
"complexType",
"array",
"sequence",
"",
array(
"clip" => array(
"name" => "clip",
"type" => "tns:Clip",
"minOccurs" => "0",
"maxOccurs" => "unbounded"
)
),
array(),
"tns:Clip"
);
// The service
$server->register(
"GetClipList",
array(),
array(
"clips" => "tns:ClipList"
),
"urn:MyNamespace",
"urn:MyNamespace#GetClipList",
"rpc",
"encoded",
"Retrieves a list of all clips."
);
Сейчас в моем # проекте VisualStudio2010 C Я добавил новый сервис на основе сгенерированного WSDL. VS создал для меня класс прокси, который содержит класс ClipList
, который имеет один элемент данных типа Clip[]
.
Пока все хорошо. Теперь, когда я вызываю GetClipList()
на свой прокси-сервер, я получаю CommunicationException
, говорящий, что он не может назначить объект типа Clip[]
объекту типа ClipList
.
Таким образом, я предполагаю, что десериализован возвращаемые данные в Clip[]
и теперь хочет, чтобы удовлетворить тип возврата метода GetClipList
(который будет ClipList
).
При изменении возвращаемого значения GetClipList()
в прокси-сервере Clip[]
приложение работает нормально. Но я хочу избежать изменения автоматически генерируемого класса по очевидным причинам.
Почему он не создает экземпляр ClipList
и не заполняет данные? Или, альтернативно, почему VS не генерирует прокси-класс, так что GetClipList
напрямую возвращает Clip[]
.