[C#]Probleem met namespaces van objecten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • FoOnEeN
  • Registratie: Juli 2003
  • Laatst online: 10:22
Hallo,

[Achtergrond info, sla over als je het niet boeiend vind :)]
Ik heb een probleem met een van de webservices van een externe partij waarvan wij gebruik maken. De webservices zelf werken goed, daar zijn geen echte problemen mee. De structuur is niet altijd zo als je graag zou willen maar daar is wel mee te leven.

Nu heeft deze externe partij echter weleens performance problemen en perioden van onbeschikbaarheid van deze webservices + een aantal strenge checks op bepaalde functies in deze webservices. Nu hebben wij het plan opgevat om deze webservices te gaan fingeren in onze testomgeving, de functionaliteit ervan compleet na te bouwen voorzover dat kan zodat wij makkelijk tests kunnen uitvoeren hiermee.

Het nabouwen van deze webservices was op zich redelijk snel gedaan, nu lopen wij echter tegen het probleem aan dat deze externe partij namespaces gebruikt voor bepaalde objecten in hun webservice, waarbij het mij niet lukt om dit ook na te bouwen. Waarschijnlijk is dit redelijk simpel op te lossen maar ik kom er niet uit.
[/Achtergrond info]

De externe partij levert zijn informatie aan in XML op de volgende manier:

<Balance xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="EIGEN URL">
<Result xmlns="URL">0</Result>
<Balance xmlns="URL">1000</Balance>
</Balance>

Nagemaakte webservice XML:
<Balance xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="EIGEN URL">
<Result>0</Result>
<Balance>1000</Balance>
</Balance>

Probleem is dus dat het stukje xmlns="URL" ook nagemaakt moet worden wil ik het laten accepteren door onze webservices die dit weer aanroepen. Is het mogelijk om dit na te bouwen in code?

Object definitie:
public class Balance
{
private int result;

public int Result
{
get { return result; }
set { result = value; }
}

private string balance;

public string Balance
{
get { return balance; }
set { balance = value; }
}
}

Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Zoiets:
C#:
1
2
3
4
5
6
[System.Xml.Serialization.XmlTypeAttribute(Namespace="EIGEN URL of URL")] 
public string Balance
{
get { return balance; }
set { balance = value; }
} 

Het is een gokje, maar wie weet. Hoe heb je trouwens de door hun aangeleverde XML omgezet naar jouw webservice? Handmatig? Of met wsdl.exe/svcutil.exe?

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:30
De namespace 'URL' is een andere namespace dan de namespace 'eigen url' die gedefinieerd wordt als de default namespace ?

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • FoOnEeN
  • Registratie: Juli 2003
  • Laatst online: 10:22
Nee dat wordt dus allemaal gedaan door .Net zelf. Heb een referentie toegevoegd naar die webservice en vervolgens interpreteert .Net dit allemaal zelf en heb ik de verschillende objecten direct in mijn programma beschikbaar.

Echter is het zo dat wij met verschillende omgevingen werken, en dat de url waarnaar de referentie verwijst in een andere omgeving exact dezelfde url heeft, maar vervolgens naar een server wijst die wij hier lokaal hebben draaien dmv aanpassen van je hosts lijst. Hierop draait dus de gefingeerde webservice.
Dit werkt goed voor classic asp welke ook gebruik maakt van deze objecten, echter onze .Net webservice omgeving is wat kieskeuriger qua aanlevering van deze data en weigert het dus in te lezen.

Edit:
Ja die 2 namespaces zijn verschillend, de eigen url is dezelfde als onze hostname, en de 2e url is eentje die linkt naar de webservice omgeving van onze externe partij.

Nu hebben zij ons wat software gegeven die aan onze kant moet draaien om verbinding te kunnen opbouwen met hun omgeving, welke als een proxy fungeert, en waarvan ik het idee heb dat deze de objecten op zo'n manier doorsluist dat wij deze op de huidige manier te zien krijgen. Hoe ik dit nabouw is verder vooralsnog een raadsel.

Edit2:
Mijn eigen manier van nabouwen momenteel is gewoon handmatig de objecten aanmaken en vervolgens de database structuur die ervoor nodig is nabouwen en implementeren. De klassen zijn allemaal erg simpel met hoogstens 5 properties enzo en verder niks aan methodes dus dat is zo gedaan.

[ Voor 34% gewijzigd door FoOnEeN op 30-10-2008 15:21 ]


Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
De meest eenvoudige manier van nabouwen van een webservice die ik kan bedenken (voor .Net) is WSDL opvragen, server side code genereren met wsdl.exe en implementeren maar. Namespaces zouden daarbij gewoon meegenomen moeten worden.

Hoe heb je nu je eigen versie van de webservice opgebouwd dan?

Acties:
  • 0 Henk 'm!

  • FoOnEeN
  • Registratie: Juli 2003
  • Laatst online: 10:22
Bigbeng, zeer bedankt. Ik had zelf nog nooit gewerkt met die wsdl tool maar zal het in de toekomst zeker vaker gaan doen. Ik kwam erachter dat onze externe partij het volgende hierin laat vermelden:
[System.Xml.Serialization.XmlTypeAttribute(Namespace="URL")], na dit in mijn code hebben ingevoegd werkt het :).

Zie nu overigens wel dat het mij wel aardig wat tijd had bespaart als ik dit eerder wist, dan had ik niet een aantal van die objecten hoeven nabouwen. Maar dat is een goede les voor de volgende keer. Dit heeft iig mijn probleem opgelost :).
Pagina: 1