Avatar billede CodingJoe Nybegynder
12. marts 2011 - 15:45 Der er 15 kommentarer og
1 løsning

Kald mod webservice med forskellig hostname (IP adresser)

Jeg har tre webservice miljøer:

1) Udvikling
2) Test
3) Produktion

De har hver især deres egen IP adresse. Jeg vil gerne lave en klient, men jeg vil dynamisk vælge, hvilken backend service server, jeg vil benytte mig af.
Det skal antages at wsdl filen altid er ens uanset miljø.

Normalt laver jeg blot en service reference i mit .net projekt, men her skal jeg i teorien blot lave een enkelt, men have muligheden for at dynamisk at tilkoble mig et andet miljø. Styringen af dette sker igennem en dropdown, hvor jeg vælger backend miljøet.

Er der nogen, der har et godt forslag til, hvordan jeg skal angribe denne lille udfordring?
Avatar billede arne_v Ekspert
12. marts 2011 - 15:53 #1
FoobarService fbs = new FoobarService();
fbs.Url = "http://test/foobar.asmx";
Avatar billede arne_v Ekspert
12. marts 2011 - 15:54 #2
Put evt. den URL i app config (eller web config hvis web app).
Avatar billede CodingJoe Nybegynder
12. marts 2011 - 15:59 #3
Det er en winform app, men der burde vel blive oprettet en app.config fil, når jeg vil tilføje reference til eet miljø...

Det eneste, der er forskellen mellem de tre miljøer, er deres ip adresser, resten er helt identisk...
Avatar billede arne_v Ekspert
12. marts 2011 - 16:01 #4
Du skal manuelt oprette en app config og så hive en værdi derfra i.s.f. at have en hardcoded URL.

Så er det nemt at skifte mellem de 3 services.
Avatar billede arne_v Ekspert
12. marts 2011 - 16:02 #5
Lav evt. logik således at ingen app config bruger produktion URL, på den måde er det kun test og dev som skal have en app config.
Avatar billede CodingJoe Nybegynder
12. marts 2011 - 16:08 #6
ok...det må jeg lige prøv...et bi spørgsmål: hvis det er iorden. Jeg har en resx fil, hvori der ligger små xml filer. Jeg kunne godt tænke mig at få en liste ud med navnene på filerne.
Kan det lade sig gøre? :D
Avatar billede arne_v Ekspert
12. marts 2011 - 16:15 #7
Jeg har aldrig prøvet, men så vidt jeg kan læse vil ResourceManager GetResourceSet returnere noget som du kan iterere over (foreach).
Avatar billede CodingJoe Nybegynder
12. marts 2011 - 16:16 #8
Ja, faldt også over den...må jeg lige prøve :D
Avatar billede arne_v Ekspert
12. marts 2011 - 19:28 #9
så smider jeg et svar
Avatar billede CodingJoe Nybegynder
12. marts 2011 - 20:14 #10
Jeg får lige det med dynamisk valg af webservice til at virke...så accepterer jeg gerne dit svar.
Avatar billede CodingJoe Nybegynder
12. marts 2011 - 21:16 #11
Jeg har lokalt lavet to simple service... den ene har jeg nu konsumeret i win app. I app.config står fx. denne adresse nu.

<endpoint address="http://localhost:53504/HelloWorld.svc" ....

Jeg vil nu lave en ServiceClient instantiering i min kode, og forsøge at overskrive url'en på endpointet med en anden...og se om det virker...
Avatar billede CodingJoe Nybegynder
12. marts 2011 - 21:22 #12
Jeg synes ikke, jeg kan se nogen .url i mit service objekt, ej heller på mit ServiceClient objekt.
Jeg bruger en ganske almindelig WCF service...
Avatar billede CodingJoe Nybegynder
12. marts 2011 - 21:24 #13
Hmmm er det ikke mere denne, der skal bruges?
ws.Endpoint.Address = new
System.ServiceModel.EndpointAddress( newurl )

prøver lige...
Avatar billede CodingJoe Nybegynder
12. marts 2011 - 21:39 #14
SUccess...jeg fik det til at virke...

Det virker lidt ligemeget at have en app.config med endpoint adressen, når den alligevel bliver overskrevet med en anden fra koden :)
Avatar billede arne_v Ekspert
12. marts 2011 - 23:08 #15
Ah - WCF - mit forslag antog den gammeldags måde at gøre det på.
Avatar billede arne_v Ekspert
13. marts 2011 - 02:29 #16
WCF er meget anderledes.

Et meget stærkt værktøj men også lidt komplekst.

Når du genererer stub med WCF skulle du helt automatisk få en app config hvor du kan tilrette adressen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester