…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.

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

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Muuda )

Twitter picture

You are commenting using your Twitter account. Log Out / Muuda )

Facebook photo

You are commenting using your Facebook account. Log Out / Muuda )

Google+ photo

You are commenting using your Google+ account. Log Out / Muuda )

Connecting to %s

Blog at WordPress.com.