Toon posts:

[ASP.Net] Instantieren afgeleide class

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goedemorgen,

Ik zit met het volgende probleem: Om de problemen die we ondervinden om te connecten met een java webservice vanuit onze ASP.Net code willen we graag gebruik maken van de volgende oplossing:
http://weblogs.asp.net/jan/archive/2004/05/08/128394.aspx

Het voorbeeld laat zich als volgt vertalen naar onze situatie, zie hieronder (er staat c++, moet C# zijn):
C++:
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class ELoketServicesSubClass : ELoketService.ELoketServices
{
  private static PropertyInfo requestPropertyInfo = null;

  public ELoketServicesSubClass() { }

  protected override System.Net.WebRequest GetWebRequest(Uri uri)
  {
    WebRequest request = base.GetWebRequest(uri);

    if (requestPropertyInfo == null)
      // Retrieve property info and store it in a static member for optimizing future use 
      requestPropertyInfo = request.GetType().GetProperty("Request");

    // Retrieve underlying web request 
    HttpWebRequest webRequest =
    (HttpWebRequest)requestPropertyInfo.GetValue(request, null);

    // Setting KeepAlive 
    webRequest.KeepAlive = false;
    return request;
  }
} 


Als ik hier nu een object van instantier en deze vervolgens gebruik om data op te halen mbv de volgende code:
C++:
10
11
12
13
14
15
16
17
18
//invoke proxy web service object
ELoketServicesSubClass javaServices = new ELoketServicesSubClass();
javaServices.Timeout = 600000;
          
//Pass loginname and password to the webservice
// and store the response in the loginResponse object        
ELoketServicesUser_digidLogin_Out loginResponse = new ELoketServicesUser_digidLogin_Out();
loginResponse = javaServices.digidLogin(txtLoginName.Text.ToString(),
                                        txtLoginPassword.Text.ToString());


Dan krijg ik de volgende melding:
code:
1
Object reference not set to an instance of an object.


Deze heeft betrekking op de laatste regel code waar we digidLogin aanroepen om ons een loginresponse te geven.

Iemand enig idee wat we fout doen? Ik kan geen fout vinden in onze code.

Verwijderd

Je javaServices is in ieder geval wel geinitialiseerd. Anders zou je al een run time error krijgen op de regel waar je je time out zet (12). Waarschijnlijk heb je txtLoginName of txtLoginPassword niet geinitialiseerd.

Als je debugged, welk object is dan null?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
idd je txtLoginName of txtLoginPassword moet null zijn of de NullPointerException treed op in digidLogin.

Je zult idd even moeten debuggen en kijken welk object null is en dan weet je precies wat er fout gaat.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
Met debuggen is te achterhalen dat de regel waar ie uiteindelijk op klapt deze is:
C++:
1
2
HttpWebRequest webRequest =
    (HttpWebRequest)requestPropertyInfo.GetValue(request, null);

  • whoami
  • Registratie: December 2000
  • Laatst online: 10-04 23:02
txtLoginName is een control, dus die zal wel geinit zijn. En als text geen waarde bevat, returned die string.Empty.

Ik denk dus eerder dat de exception zich voordoet in de dididLogin method. Maar, om dat na te gaan moet je dus eens je code debuggen.
Zowiezo is het de bedoeling dat jij als programmeur je code kan debuggen. Een nullref exception duid op het lezen/schrijven van/naar een stuk niet geinitialiseerd geheugen en dat kan je simpel oplossen door te debuggen en na te gaan welke variable er NULL is.
edit:

/laat...

[ Voor 3% gewijzigd door whoami op 20-02-2006 10:22 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Iets verder gekeken. Na deze regel:
C:
1
requestPropertyInfo = request.GetType().GetProperty("Request");

is requestPropertyInfo nog steeds null

Verwijderd

Dan wordt die waarde dus niet mee gepost en daaorm klapt hij dus een regel verder omdat hij daar dat object gebruikt.

Verwijderd

Topicstarter
Verwijderd schreef op maandag 20 februari 2006 @ 10:27:
Dan wordt die waarde dus niet mee gepost en daaorm klapt hij dus een regel verder omdat hij daar dat object gebruikt.
Ja precies, alleen waarom werkt het bij hun allemaal dan wel, maar bij mij niet? (de oplossing uit mijn eerste post wordt veel gebruikt).

Dit stukje code
C:
1
request.GetType().GetProperty("Request");


levert dus niks op. Maar waarom niet?

  • whoami
  • Registratie: December 2000
  • Laatst online: 10-04 23:02
Omdat die prpoerty Request waarschijnlijk niet bestaat, of toch niet public accesible is.

HttpWebRequest heeft idd geen public Request property, als m'n ogen me niet bedriegen.
HttpWebRequest heeft wel een GetRequestStream method.

[ Voor 48% gewijzigd door whoami op 20-02-2006 10:41 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op maandag 20 februari 2006 @ 10:39:
Omdat die prpoerty Request waarschijnlijk niet bestaat, of toch niet public accesible is.
Maar het is toch niet logisch dat het bij velen wel zou werken, maar bij ons niet?

  • whoami
  • Registratie: December 2000
  • Laatst online: 10-04 23:02
Van wat is ELoketServices afgeleid ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Een WebReference naar een Java webservice

  • whoami
  • Registratie: December 2000
  • Laatst online: 10-04 23:02
Tja, dat voorbeeld dat je toont die je van die blog gehaald hebt, werkt natuurlijk omdat het een .NET web service is.
We zegt dat jouw Java webservice - class ergens een property heeft die Request heet ? AFAIK kent Java zelfs geen properties.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Volgens mij klopt dat niet helemaal wat je zegt, het is toch een geinstantieerde .Net "WebRequest" object? Dus dan zou ik de beschikking moeten hebben over de bijbehorende properties lijkt me.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
In de MSDN staat zo ver ik kan zien ook dat WebRequest helemaal geen Request property heeft.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • whoami
  • Registratie: December 2000
  • Laatst online: 10-04 23:02
Verwijderd schreef op maandag 20 februari 2006 @ 13:22:
Volgens mij klopt dat niet helemaal wat je zegt, het is toch een geinstantieerde .Net "WebRequest" object? Dus dan zou ik de beschikking moeten hebben over de bijbehorende properties lijkt me.
Als dat zo is, dan vraag ik mij af waarom er in dat voorbeeld gebruik gemaakt wordt van reflection om die property op te halen. Indien die property public/protected is, hoef je helemaal geen reflection te gebruiken.
IMO is die property dus niet public of protected, en, zoals rwb ook al zegt, in de MSDN staat er helemaal geen Request property bij de HttpWebRequest class.

https://fgheysels.github.io/


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 20:37

mulder

ik spuug op het trottoir

Moet je niet gewoon adhv de wsdl een proxyclass genereren?

oogjes open, snaveltjes dicht

Pagina: 1