2013-01-04 10:46:26 |
ctmidi |
description |
i think that WSDL generation may be broken, or at least incompatible with C# implementation of it as when trying to consume SOAP 1.1 from C#, any array will have null value even if Ladon will actually send some XML data.
i have seen another bug reported here telling that WSDL Array are broken, BTW the provided patch do not help, i think this is still broken and may be inner elements should be contained inside specific node rather than in "item" ?
here is how to reproduce this from the AlbumService example provided :
1/ from any Visual Studio project, as Console Application, first create a Service Web reference like explained here : http://webservices20.blogspot.fr/2008/10/interoperability-gotcha-visual-studio.html for this example called 'albumsWR'
2/ code for the C# apps
---8<---
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using ConsoleApplication6.albumsWR; // PUT HERE THE NAME OF THE "Web References" you provide @ step 1
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
AlbumService albumService = new AlbumService();
var filteredAlbums = albumService.listAlbums("The");
if (filteredAlbums.item == null)
{
Console.WriteLine("null contained, while it should not!");
}
}
}
}
---8<---
when checking the result with SOAP UI, of course an XML result is provided, if we intercept the data sent with Fiddler to the C# program here is what is provided so one can check that is not a 'null' answer, BTW may be some inconsistencies occurs between the WSDL definition and/or namespace and the result provided, that prevent C# to understand how to unserialize the result ?
---8<---
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns="urn:AlbumService" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<ns:listAlbumsResponse>
<result>
<item>
<band>
<album-titles>
<item>Album Of The Year</item>
<item>KING FOR A DAY - FOOL FOR A LIFETIME</item>
</album-titles>
<name>Faith No More</name>
</band>
<title>Album Of The Year</title>
<songs>
<item>Ashes To Ashes.mp3</item>
<item>Mouth To Mouth.mp3</item>
<item>Last Cup Of Sorrow [Sharam Versus Fnm Club Mix] [Bonus Track].mp3</item>
<item>Paths Of Glory.mp3</item>
<item>Pristina.mp3</item>
<item>Light Up And Let Go [Bonus Track].mp3</item>
<item>Helpless.mp3</item>
<item>The Big Kahuna [Bonus Track].mp3</item>
<item>She Loves Me Not.mp3</item>
<item>Stripsearch.mp3</item>
<item>Last Cup Of Sorrow.mp3</item>
<item>Collision.mp3</item>
<item>Home Sick Home.mp3</item>
<item>She Loves Me Not [Spinna Crazy Dub Mix] [Bonus Track].mp3</item>
<item>Last Cup Of Sorrow [Rammstein Mix] [Bonus Track].mp3</item>
<item>Naked In Front of The Computer.mp3</item>
<item>Got That Feeling.mp3</item>
<item>Ashes To Ashes [Hardknox Alternative Mix] [Bonus Track].mp3</item>
</songs>
</item>
<item>
<band>
<album-titles>
<item>Paint The Sky With Stars - The Best Of Enya</item>
</album-titles>
<name>Enya</name>
</band>
<title>Paint The Sky With Stars - The Best Of Enya</title>
<songs>
<item>Watermark.mp3</item>
<item>Boadicea.mp3</item>
<item>Storms In Africa.mp3</item>
<item>Book Of Days.mp3</item>
<item>Caribben Blue.mp3</item>
<item>The Celts.mp3</item>
<item>Anywhere Is.mp3</item>
<item>Shepherd Moons.mp3</item>
<item>China Roses.mp3</item>
<item>Marble Halls.mp3</item>
<item>On My Way Home.mp3</item>
<item>Ebudae.mp3</item>
<item>The Memory Of Trees.mp3</item>
<item>Paint The Sky With Stars.mp3</item>
<item>Only If....mp3</item>
<item>Orinoco Flow.mp3</item>
</songs>
</item>
<item>
<band>
<album-titles>
<item>Zitilites</item>
<item>No Balance Palace</item>
<item>Home Dead</item>
<item>Travelogue</item>
<item>Cruzential</item>
<item>The Good Life</item>
</album-titles>
<name>Kashmir</name>
</band>
<title>The Good Life</title>
<songs>
<item>Gorgeous.mp3</item>
<item>New Year's Eve.mp3</item>
<item>Lampshade.mp3</item>
<item>It's OK Now.mp3</item>
<item>Graceland.mp3</item>
<item>Miss You.mp3</item>
<item>Mudbath.mp3</item>
<item>Mom In Love, Daddy In Space.mp3</item>
<item>Kiss Me Goodbye.mp3</item>
<item>Make It Grand.mp3</item>
</songs>
</item>
<item>
<band>
<album-titles>
<item>The Wall CD2</item>
<item>The Wall Part I</item>
</album-titles>
<name>Pink Floyd</name>
</band>
<title>The Wall CD2</title>
<songs>
<item>Nobody Home.mp3</item>
<item>Waiting For The Worms.mp3</item>
<item>Bring The Boys Back Home.mp3</item>
<item>The Trial.mp3</item>
<item>Is There Anybody Out There?.mp3</item>
<item>Comfortably Numb.mp3</item>
<item>Run Like Hell.mp3</item>
<item>The Show Must Go On.mp3</item>
<item>Vera.mp3</item>
<item>In The Flesh.mp3</item>
<item>Outside The Wall.mp3</item>
<item>Hey You.mp3</item>
<item>Stop.mp3</item>
</songs>
</item>
<item>
<band>
<album-titles>
<item>The Wall CD2</item>
<item>The Wall Part I</item>
</album-titles>
<name>Pink Floyd</name>
</band>
<title>The Wall Part I</title>
<songs>
<item>The Happiest Days Of Our Lives.mp3</item>
<item>Another Brick In The Wall (Part 1).mp3</item>
<item>Goodbye Cruel World.mp3</item>
<item>One Of The Turns.mp3</item>
<item>In The Flesh?.mp3</item>
<item>Empty Spaces.mp3</item>
<item>The Thin Ice.mp3</item>
<item>Goodbye Blue Sky.mp3</item>
<item>Another Brick In The Wall (Part 2).mp3</item>
<item>Another Brick In The Wall (Part 3).mp3</item>
<item>Young Lust.mp3</item>
<item>Mother.mp3</item>
<item>Don't Leave Now.mp3</item>
</songs>
</item>
</result>
</ns:listAlbumsResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
---8<--- |
i think that WSDL generation may be broken, or at least incompatible with C# implementation of it as when trying to consume SOAP 1.1 from C#, any array will have null value even if Ladon will actually send some XML data.
i have seen another bug reported here telling that WSDL Array are broken, BTW the provided patch do not help, i think this is still broken and may be inner elements should be contained inside specific node rather than in "item" ?
here is how to reproduce this from the AlbumService example provided :
1/ from any Visual Studio project, as Console Application, first create a Service Web reference like explained here : http://webservices20.blogspot.fr/2008/10/interoperability-gotcha-visual-studio.html for this example called 'albumsWR'
2/ code for the C# apps
---8<---
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using ConsoleApplication6.albumsWR; // PUT HERE THE NAME OF THE
// ... "Web eferences" you provide @ step 1
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
AlbumService albumService = new AlbumService();
var filteredAlbums = albumService.listAlbums("The");
if (filteredAlbums.item == null)
{
Console.WriteLine("null contained, while it should not!");
}
}
}
}
---8<---
when checking the result with SOAP UI, of course an XML result is provided, if we intercept the data sent with Fiddler to the C# program here is what is provided so one can check that is not a 'null' answer, BTW may be some inconsistencies occurs between the WSDL definition and/or namespace and the result provided, that prevent C# to understand how to unserialize the result ?
here is a cut n paste of this interception with Fiddler (that is the raw Ladon answer to the C# call)
---8<---
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns="urn:AlbumService" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<ns:listAlbumsResponse>
<result>
<item>
<band>
<album-titles>
<item>Album Of The Year</item>
<item>KING FOR A DAY - FOOL FOR A LIFETIME</item>
</album-titles>
<name>Faith No More</name>
</band>
<title>Album Of The Year</title>
<songs>
<item>Ashes To Ashes.mp3</item>
<item>Mouth To Mouth.mp3</item>
<item>Last Cup Of Sorrow [Sharam Versus Fnm Club Mix] [Bonus Track].mp3</item>
<item>Paths Of Glory.mp3</item>
<item>Pristina.mp3</item>
<item>Light Up And Let Go [Bonus Track].mp3</item>
<item>Helpless.mp3</item>
<item>The Big Kahuna [Bonus Track].mp3</item>
<item>She Loves Me Not.mp3</item>
<item>Stripsearch.mp3</item>
<item>Last Cup Of Sorrow.mp3</item>
<item>Collision.mp3</item>
<item>Home Sick Home.mp3</item>
<item>She Loves Me Not [Spinna Crazy Dub Mix] [Bonus Track].mp3</item>
<item>Last Cup Of Sorrow [Rammstein Mix] [Bonus Track].mp3</item>
<item>Naked In Front of The Computer.mp3</item>
<item>Got That Feeling.mp3</item>
<item>Ashes To Ashes [Hardknox Alternative Mix] [Bonus Track].mp3</item>
</songs>
</item>
<item>
<band>
<album-titles>
<item>Paint The Sky With Stars - The Best Of Enya</item>
</album-titles>
<name>Enya</name>
</band>
<title>Paint The Sky With Stars - The Best Of Enya</title>
<songs>
<item>Watermark.mp3</item>
<item>Boadicea.mp3</item>
<item>Storms In Africa.mp3</item>
<item>Book Of Days.mp3</item>
<item>Caribben Blue.mp3</item>
<item>The Celts.mp3</item>
<item>Anywhere Is.mp3</item>
<item>Shepherd Moons.mp3</item>
<item>China Roses.mp3</item>
<item>Marble Halls.mp3</item>
<item>On My Way Home.mp3</item>
<item>Ebudae.mp3</item>
<item>The Memory Of Trees.mp3</item>
<item>Paint The Sky With Stars.mp3</item>
<item>Only If....mp3</item>
<item>Orinoco Flow.mp3</item>
</songs>
</item>
<item>
<band>
<album-titles>
<item>Zitilites</item>
<item>No Balance Palace</item>
<item>Home Dead</item>
<item>Travelogue</item>
<item>Cruzential</item>
<item>The Good Life</item>
</album-titles>
<name>Kashmir</name>
</band>
<title>The Good Life</title>
<songs>
<item>Gorgeous.mp3</item>
<item>New Year's Eve.mp3</item>
<item>Lampshade.mp3</item>
<item>It's OK Now.mp3</item>
<item>Graceland.mp3</item>
<item>Miss You.mp3</item>
<item>Mudbath.mp3</item>
<item>Mom In Love, Daddy In Space.mp3</item>
<item>Kiss Me Goodbye.mp3</item>
<item>Make It Grand.mp3</item>
</songs>
</item>
<item>
<band>
<album-titles>
<item>The Wall CD2</item>
<item>The Wall Part I</item>
</album-titles>
<name>Pink Floyd</name>
</band>
<title>The Wall CD2</title>
<songs>
<item>Nobody Home.mp3</item>
<item>Waiting For The Worms.mp3</item>
<item>Bring The Boys Back Home.mp3</item>
<item>The Trial.mp3</item>
<item>Is There Anybody Out There?.mp3</item>
<item>Comfortably Numb.mp3</item>
<item>Run Like Hell.mp3</item>
<item>The Show Must Go On.mp3</item>
<item>Vera.mp3</item>
<item>In The Flesh.mp3</item>
<item>Outside The Wall.mp3</item>
<item>Hey You.mp3</item>
<item>Stop.mp3</item>
</songs>
</item>
<item>
<band>
<album-titles>
<item>The Wall CD2</item>
<item>The Wall Part I</item>
</album-titles>
<name>Pink Floyd</name>
</band>
<title>The Wall Part I</title>
<songs>
<item>The Happiest Days Of Our Lives.mp3</item>
<item>Another Brick In The Wall (Part 1).mp3</item>
<item>Goodbye Cruel World.mp3</item>
<item>One Of The Turns.mp3</item>
<item>In The Flesh?.mp3</item>
<item>Empty Spaces.mp3</item>
<item>The Thin Ice.mp3</item>
<item>Goodbye Blue Sky.mp3</item>
<item>Another Brick In The Wall (Part 2).mp3</item>
<item>Another Brick In The Wall (Part 3).mp3</item>
<item>Young Lust.mp3</item>
<item>Mother.mp3</item>
<item>Don't Leave Now.mp3</item>
</songs>
</item>
</result>
</ns:listAlbumsResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
---8<--- |
|