Ben bir karmaşık türü bir dizi döndüren bir SOAP hizmeti var. PHP NuSOAP in tanımı aşağıdaki gibidir:
// 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."
);
Şimdi benim VisualStudio2010 C # projesi ben oluşturulan WSDL dayalı yeni bir hizmet ekledi. VS bana türünde tek bir veri üyesi olan bir sınıf ClipList içeren kullanmak için bir proxy sınıfını yarattı Clip[].
Şimdiye kadar iyi. I GetClipList() Benim proxy Şimdi çağırdığınızda ben olsun CommunicationException bu tip {[(3 bir nesne türü Clip[] bir nesne atamak olamayacağını bana )]}.
Yani bu bir Clip[] içine döndürülen verileri serisi ve şimdi GetClipList yöntemin dönüş türü karşılamak istediğini varsayarak (olurdu ClipList).
Için vekaleten GetClipList() dönüş değerini değiştirirken Clip[] elle uygulama iyi çalışır. Ama bilinen nedenlerle otomatik oluşturulan sınıf değiştirme önlemek istiyor.
Peki, neden bir ClipList örneğini ve veri üyesi doldurmak değil mi? GetClipList, doğrudan bir Clip[] döndürür ve böylece alternatif olarak ya da, neden VS proxy sınıfı oluşturmaz.