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.