Toon posts:

[.NET] Dynamische webservice proxy, is dit mogelijk?

Pagina: 1
Acties:

Verwijderd

Topicstarter
We hebben een prachtige webservice ontwikkeld die op dit moment vanuit een ASP.NET page wordt aangeroepen en waarheen een hoop data verstuurd wordt. Deze ASP.NET page maakt altijd gebruik van de zelfde webservice (zelfde adres waar deze gehost wordt). De webservice is een soort 'order ontvanger'. De webservice zorgt dat een order die op internet geplaatst is, ontvangen wordt en op een netwerk als ms access database klaargezet wordt.

Nu wil de opdrachtgever meerdere 'order ontvang' locaties toevoegen. Dat betekend dat onze ASP.NET pagina voor sommige orders de webservice van 'order ontvanger A' en andere naar 'order ontvanger B' aan moet roepen. Deze 'order ontvangers' kan de klant zelf toevoegen.

Nu kijk ik in onze webservice proxy code en waarin staat hardcoded het IPadres van de webservice die we aanroepen.

Fragment van de code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    [System.Web.Services.WebServiceBindingAttribute(Name="OrderProcessorSoap", 
    Namespace="https://000.000.000.000/orderservice/")]

    public class CardOrderProcessor : System.Web.Services.Protocols.SoapHttpClientProtocol {

        public CardOrderProcessor() {
            this.Url = "https://000.000.000.000/orderservice/orderprocessor.asmx";
        }
        
        [System.Web.Services.Protocols.SoapDocumentMethodAttribute("https://000.000.000.000/orderservice/GetOrder", 
    RequestNamespace="https://000.000.000.000/orderservice/", ResponseNamespace="https://000.000.000.000/orderservice/", 
    Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
        public bool GetOrder(CardOrder objOrder, System.Data.DataSet objCardHoldersDataSet, System.Data.DataSet objCardFieldsDataSet, string Password) {

        }


Deze code wordt overigens voor gebruik door de ASP.NET page gecompileerd naar een assembly dll.
Is er een manier om het ipadres waar deze webservice aan gekoppeld is, dynamisch te houden.
De interface / functionaliteit van de webservices is bij alle 'order ontvangers' gelijk dus wat dat betreft is er geen probleem. Graag jullie hulp.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19-05 13:45

gorgi_19

Kruimeltjes zijn weer op :9

Je kan hem toch gewoon wijzigen? :) Enige is dat je generatie van de code niet meer werkt en je bij een refresh / update deze waarde moet aanpassen :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Het idee is dat de ASP.NET page gebruikt maakt van de webservice 'orderprocessor'. Voor deze deze webservice staat er 1 proxyobject in de bin directory. Nu staat het ipadres van de webservice vast in het proxyobject. De ASP.NET page moet de ene keer naar ipadres 000.000.000.000 en de volgende keer misschien naar 100.100.100.100.
Hoe doe ik dat met dat ene proxyobject waar het ipadres 000.000.000.000 als hardcoded staat opgeslagen?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19-05 13:45

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op donderdag 16 december 2004 @ 15:51:
Het idee is dat de ASP.NET page gebruikt maakt van de webservice 'orderprocessor'. Voor deze deze webservice staat er 1 proxyobject in de bin directory. Nu staat het ipadres van de webservice vast in het proxyobject. De ASP.NET page moet de ene keer naar ipadres 000.000.000.000 en de volgende keer misschien naar 100.100.100.100.
Hoe doe ik dat met dat ene proxyobject waar het ipadres 000.000.000.000 als hardcoded staat opgeslagen?
this.Url dynamisch laten vullen dmv een parameter?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ok, dat is simpel.
Alleen dan vraag ik me af, waar dient het volgende stukje code voor dan?

code:
1
2
 [System.Web.Services.WebServiceBindingAttribute(Name="OrderProcessorSoap", 
    Namespace="https://000.000.000.000/orderservice/")]


Dit kan je niet middels een property aanpassen en wordt hardcoded gecompileerd naar de dll.
Wordt dit geen probleem?

  • tijn
  • Registratie: Februari 2000
  • Laatst online: 22-03 21:36
Persoonlijk vind ik het het handigst om de gegenereerde classes te subclassen en daar de connectie in te regelen (bijv lezen uit de .config of anderszins runtime instellen). Hierdoor kun je rustig je gegenereerde code opnieuw genereren zonder dat je steeds een of andere hardcoded url moet gaan vervangen.
Ok, dat is simpel.
Alleen dan vraag ik me af, waar dient het volgende stukje code voor dan?


[System.Web.Services.WebServiceBindingAttribute(Name="OrderProcessorSoap",
Namespace="https://000.000.000.000/orderservice/")]
Dit staat los van de daadwerkelijke url van de webservice maar slaat op de XML namespace van je webservice interface. Google maar eens waar XML namespaces precies voor dienen.

Cuyahoga .NET website framework


Verwijderd

Topicstarter
Ok duidelijk, subclassen is een goed plan. Gaan we doen.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

De namespace is redelijk 'nutteloos'. Ik heb hier in een project hetzelfde aan de hand en vul de url property gewoon @ instantation met een setting uit Web.config :)

Professionele website nodig?


Verwijderd

Topicstarter
Die namespace had me even op het verkeerde been gebracht wat dat betreft. Dacht dat deze ook wel van invloed zou zijn op het moment dat je het object aanroept vanuit de .NET omgeving.
Pagina: 1