[C#/ASP.NET2] Proxy - Requests

Pagina: 1
Acties:

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
Ik ben met een opdracht bezig waar ik een bestaande applicatie (in JSP/Java) moet nabootsen in ASP.NET 2.0 (De reden is even niet relevant).

Even een korte summary om het duidelijk te maken:

Het systeem bestaat uit een paar onderdelen:
  • Web GUI Client (in JSP(Struts)/Java)
  • JBOSS Server met XML GUI
  • MySQL DB
Het is de bedoeling dat de JBOSS server en de MySQL db gewoon hetzelfde blijft.
Het gaat er dus om dat ik alleen de WEB GUI moet nabootsen in ASP.NET en dat deze gekoppeld moet worden aan de reeds bestaande JBOSS server.

Het is een soort van (web)service, maar er wordt hier geen gebruik gemaakt van WSDL of SOAP maar een eigen gemaakte XLM GUI die perfect werkt. (vraag me niet hoe, want het is niet van mij en niet relevant voor mijn vraag hier). Mijn opdracht is dus om hier een WEB GUI voor te maken.
Om te testen draait alles localhost zowel JBOSS, MySQL en Client.

Ik ben al een heel eind en ben op het punt gekomen waar ik verbinding wil maken via de GUI met de JBOSS server.

Ik maak hierbij gebruik van jscript. Ik zal een stukje hier neer zetten wat mss relevant is.
Wel zitten ze in verschillende files dus dit is niet uit 1 bestand
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//dit is het begin voor het aanroepen van de jboss server
xmlGet('xml/login?id='+id+'&pass='+pass+'&GUI=WEB', loginHandler);

//hier is de functie wordt aangeroepen (er zijn 2 verschillende Get en Post vandaar dat deze bestaat)
function xmlGet(url, responseHandler) {
    xmlOpen("GET", encodeURI(url), null, responseHandler);
}

//deze functie zorgt voor die request
function xmlOpen(method, url, toSend, responseHandler) {
//...
//...checks voor IE of FF
requests[chosenIndex] = new XMLHttpRequest();
//...
if (requests[chosenIndex]) {
var handlerFunction = getResponseHandler(chosenIndex, responseHandler);
requests[chosenIndex].onreadystatechange = handlerFunction;
requests[chosenIndex].open(method, url, true);
requests[chosenIndex].setRequestHeader("content-type", "application/x-www-form-urlencoded");
requests[chosenIndex].send();
}


Ok na wat gepruts etc kwam ik erachter dat ik met een probleem zat. Duurde ff maar het probleem is dit:Functie open()
Link MSDN
Security Alert Cross-domain, cross-port, and mixed protocol requests are not allowed.
Mjah alles draait bij mij localhost: JBOSS localhost:8080, ASP.NET Client localhost:51345
Hmm niet cross-port compatible :| ! |:(

Ok iemand gevraagd van het bestaande project en zij hadden hetzelfde probleem en hebben dit opgelost met een proxy servlet (HttpProxyServlet) en wat aanpassingen in de web.xml.
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
<servlet>
  <servlet-name>proxy</servlet-name> 
  <servlet-class>****.HttpProxyServlet</servlet-class> 
- <init-param>
  <param-name>config</param-name> 
  <param-value>web.xml</param-value> 
  </init-param>
</servlet>

<servlet-mapping>
  <servlet-name>proxy</servlet-name> 
  <url-pattern>/xml/*</url-pattern> 
</servlet-mapping>

dit stond (vond ik) ook nog de web-config.xml (wellicht dat dit handig is voor mij...)
XML:
1
2
3
4
5
<xml>
  <host>http://127.0.0.1</host> 
  <port>8080</port> 
  <path>xml</path> 
</xml>

Ok en tjah .NET en servlets gaan niet samen, dus dan nu maar een proxy iets maken in C#..... :)
Paar tutorials gevonden, als asproxy en HTTPReverseProxy
Maar die zijn zo uitgebreid dat ik het enigzins met de vraag zit:
Kan dat niet makkelijker????

Ze gebruiken beide totaal verschillende aanpak en heb al verschillende dingen geprobeerd als <appSettings> toevoegen in config, heb gebruik gemaakt van System.Net als WebProxy en WebRequest. Maar tot u toe heb ik alleen te simpele dingen geprobeerd die op zichzelf nooit kunnen werken.
Ik heb bv dit geprobeerd:
C#:
1
2
3
WebProxy proxyObject = new WebProxy("http://localhost:8080/", true);
WebRequest req = WebRequest.Create("http://localhost:51345");
req.Proxy = proxyObject; 

en
XML:
1
2
3
4
5
<system.net>
    <defaultProxy>
      <proxy proxyaddress="http://localhost:8080" bypassonlocal="true" usesystemdefault="false" />
    </defaultProxy>
  </system.net>

Maar ik kom er niet helemaal uit... en vind die tutorials niet echt bepaald simpel :P. Heb overigens wel de complete demos die te downloaden is bij die tutorials. Heb het gevoel dat ik wel redelijk in de goeie richting zit maar heb het "licht" nog niet helemaal gezien 8)

Mijn vraag is dan ook wat moet ik precies doen om een proxy aan te maken??
Iemand een goede tip, demo, tut of hint?

Denk dat ik ff verder ga prutsen met die 2de tutorial HTTPReverseProxy aangezien die niet ingewikkeld oogt tov van de andere en is duidelijker geformuleerd. (btw alle comments zijn int frans }:| )

Alvast bedankt! :)

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


  • Mephix
  • Registratie: Augustus 2001
  • Laatst online: 25-11 20:41
Een slap antwoord misschien, maar kun je vanuit asp.net niet beter met native (.net framework) xml objecten in je code werken ?

Ik weet zeker dat je daarbij gewoon de vrijheid hebt om requests te openen naar bepaalde ip adressen, poorten etc. Je kunt dan de xml functionaliteiten in .NET gebruiken om de response uit elkaar te vlooien en je interface op te bouwen.

Nogmaals, tis misschien een slap alternatief, omdat het niet echt een antwoord op je vraag biedt, maar misschien toch een goed idee ?

Edit: om mijn idee nog wat aan te sterken... om nu een soort proxy constructie te moeten gebruiken om gewoon wat xml te requesten lijkt me niet hoeven.

[ Voor 14% gewijzigd door Mephix op 05-06-2007 11:34 ]


  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
Mephix schreef op dinsdag 05 juni 2007 @ 11:31:
Een slap antwoord misschien, maar kun je vanuit asp.net niet beter met native xml objecten in je code werken ?

Ik weet zeker dat je daarbij gewoon de vrijheid hebt om requests te openen naar bepaalde ip adressen, poorten etc. Je kunt dan de xml functionaliteiten in .NET gebruiken om de response uit elkaar te vlooien en je interface op te bouwen.

Nogmaals, tis misschien een slap alternatief, omdat het niet echt een antwoord op je vraag biedt, maar misschien toch een goed idee ?
Ik snap denk ik wat je bedoeld. Wel fijn om te weten dat C# wat vrijer is en minder beperkt dan dat js gebeuren...
Probleem is alleen dat dan van het huidige "geheel", ofwel de hele lap met code etc wat al bestond weg kan gooien en dus zou ik alles zelf opnieuw moeten maken :)
Als ik de tijd had was het een goed alternatief, maar met mijn beperkte tijdschema helaas geen oplossing :'( (afstudeerstage hehe }:O )
Mephix schreef op dinsdag 05 juni 2007 @ 11:31:
Edit: om mijn idee nog wat aan te sterken... om nu een soort proxy constructie te moeten gebruiken om gewoon wat xml te requesten lijkt me niet hoeven.
Hmm ok. Maar zoals ik zal zei zijn er een helehoop functies in js geschreven (handlers etc) die precies doen wat ze moeten doen.... en dan zou ik die allemaal moeten na gaan maken in C# wat een beetje tijdrovend is ben ik bang ...
Ik ga ff verder kijken en wacht ff af wat andere mensen te zeggen hebben. Kot er niets zinnigs uit dan zal ik maar ff zweet en tranen moeten werken om een degelijk prototype neer te kunnen zetten in 2 weken :p

[ Voor 25% gewijzigd door Tijgertje84 op 05-06-2007 12:04 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H