복잡한 유형의 배열을 반환하는 SOAP 서비스가 있습니다. PHP에서 NuSOAP의 정의는 다음과 같습니다 내 VisualStudio2010 C# 프로젝트에서 이제 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."
);
내가 생성 된 WSDL을 기반으로 새로운 서비스를 추가했다. VS
ClipList
Clip[]
단일 데이터 멤버가있는 클래스를 포함하는 사용할 프록시 클래스를 만들었습니다.
지금까지 그렇게 좋았습니다. 이제 GetClipList()
을 내 프록시로 호출하면 CommunicationException
이라는 유형의 객체를 ClipList
유형의 객체에 Clip[]
할당 할 수 없다는 메시지가 나타납니다.
그래서 반환 된 데이터를 Clip[]
으로 deserialize 한 다음 GetClipList
메서드의 반환 유형 (ClipList
)을 만족하려고합니다.
프록시에서 GetClipList()
의 반환 값을 Clip[]
으로 수동으로 변경하면 응용 프로그램이 정상적으로 실행됩니다. 하지만 명백한 이유로 자동 생성 클래스를 변경하지 않도록하고 싶습니다.
그래서 왜 ClipList
을 인스턴스화하고 데이터 멤버를 채우지 않습니까? 또는 VS가 프록시 클래스를 생성하지 않아서 GetClipList
이 직접 Clip[]
을 반환하는 이유는 무엇입니까?