…meie igapäevast IT’d anna meile igapäev…

2007-09-06

MS SOAP Toolkit’i viga

Filed under: Isiklikud,Programmeerimine — Sander @ 09:38:15

Aeg-ajalt tuleb kõigil programmeerijatel kokku puutuda müstiliste vigadega. Panen siia endale ja teistele tuleviku jaoks kirja palju peavalu tekitanud probleemi Microsoft SOAP Tookit 3.0’iga.

MS SOAP Toolkit on vananenud tehnoloogiline lahendus, mis võimaldas COM’i abil kasutada elementaarseid veebiteenuseid. Tänapäeval on selle lihtsalt asendanud .NET.

Aga kliendil oli vaja minu loodud veebiteenusele ligi pääseda just nimelt SOAP Toolkiti abil, sest Axapta kasutab veebiteenuseid just nimelt selle abil. Testimise jaoks sai tehtud kliendile VBS skript, mis samuti sedasama toolkitti kasutab.

Aga siis algas jama. Nimelt sai skript järgmise vea:

(otsirobotite jaoks ka tekstina: SoapMapper:Restoring data into SoapMapper fdokResult failed HRESULT=0x80070057: The parameter is incorrect. – Client:Unspecified client error. HRESULT=0x80070057: The parameter is incorrect.)

Arusaamatu. Kõik oli korras – localhosti brauseris veebiteenus töötas täpselt samade sisenditega, C#’s kirjutatud testklient töötas ilma vähimategi probleemideta… aga VBS sai vea. Lasin siis skripti VBScriptis targem oleval inimesel üle vaadata, sest ise seda praktiliselt kasutanud ei ole – ning eriti kahtlane oli see, et algne skriptivariant oli kirjutatud selle programmeerija poolt.

Kuid ka nemad ei osanud mingeid vigu leida. Vea googeldamine andis terve hunniku kasutuid vastuseid, enamus stiilis “Kõik on nüüd korras, andsin ennem kogemata tühja massiivi”. Hakkasin siis kindluse mõttes väljundstruktuuri vähendama aga ei miskit, ikka sama viga – kuni mul oli tulemuseks vaid <message>Test</message>. Ning ikka sain selle vea.

Veebiteenuse väljundstruktuur oli mul järgmine:

[Serializable]
[XmlRootAttribute("fdokResult", Namespace = "http://www.test",
IsNullable = false)]
public struct FDOKQueryResult
{
    public string FIN;
  snip-snip-snip
    public string ResultStatus;
    public string SessionID;
    public DateTime dStarted;
}

Ehk tavaline pikavõitu .NET struktuur (snip-snip-snip kohalt korjasin paarkümmend välja ära), ei midagi erilist. Serializable, kuna mul oli vaja asju vahemällu – ehk siis viisakamalt öeldes ketta peale – hilisemaks kasutamiseks salvestada.

Aga oot… äkki ongi XmlRootAttribute‘s viga. Nullable ei saa kahjuks true panna nagunii… mida kuradit saaks teha? Siis proovisin ilma serialiseerimata ja…

…ja äkitselt kõik töötas. Ilma vigadeta.

Nagu selgus, ei õnnestu SOAP Toolkitil serialiseeritud struktuuriga hakkama saada. Seejuures on veebiteenusest välja tulev XML täpselt samasugune. Kuid mis on – ainult tühised erinevused WSDL’is – ja seetõttu ei oskagi SOAP Toolkit veebiteenuse tulemust korralikult käsitseda. Pool päeva panin selle peale magama, kurat. Olgu järgmisel inimesel siis sellevõrra kergem.

Advertisements

2 kommentaari »

  1. Halleluuja! Äkki analoogne jama tekkis mul siis, kui oli vaja MSSQL-i XML-i jura tööle saada üle IIS-i…

    Kommentaar kirjutas Gunnar — 2007-09-06 @ 14:05:37 | Vasta

  2. Ei tea kommenteerida, minu kogemused MS-SQL serveri ja XML’iga ei ole olnud just meeldivad. Eks see veateade ole üks neist universaalsetest ja seetõttu kasututest.

    Kommentaar kirjutas dukelupus — 2007-09-07 @ 08:34:11 | Vasta


RSS feed for comments on this post. TrackBack URI

Lisa kommentaar

Täida nõutavad väljad või kliki ikoonile, et sisse logida:

WordPress.com Logo

Sa kommenteerid kasutades oma WordPress.com kontot. Logi välja / Muuda )

Twitter picture

Sa kommenteerid kasutades oma Twitter kontot. Logi välja / Muuda )

Facebook photo

Sa kommenteerid kasutades oma Facebook kontot. Logi välja / Muuda )

Google+ photo

Sa kommenteerid kasutades oma Google+ kontot. Logi välja / Muuda )

Connecting to %s

Create a free website or blog at WordPress.com.