Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Come richiamare una webservice wsdl

    Ciao a tutti,
    mi sto esercitando sulla creazione di un webform per prendere dei dati da un servizio online wsdl.
    Non avendo nessun wsdl su cui lavorare ne ho cercato uno gratis online e ho trovato questo
    http://www.webservicex.net/ConvertTe...op=ConvertTemp

    come prima cosa ho aggiunto cliccato su aggiungi riferimento al servizio nel progetto
    dopo di che nella finestra dei riferimenti ho scelto ConvertTemperatureSoap


    la webservice accetta 3 parametri
    public double ConvertTemp(double Temperature, WebApi.ConvertTemp.TemperatureUnit FromUnit, WebApi.ConvertTemp.TemperatureUnit ToUnit)

    dopo aver creato una textbox e un button ho scritto questo
    codice:
     protected void Button1_Click(object sender, EventArgs e)
            {
               var From= ConvertTemp.TemperatureUnit.degreeCelsius;
                var To = ConvertTemp.TemperatureUnit.degreeFahrenheit;
                double Gradi = Double.Parse(TxtGradi.Text);
    
    
                ConvertTemp.ConvertTemperatureSoapClient converti = new ConvertTemp.ConvertTemperatureSoapClient();
               double GradiConvertiti = converti.ConvertTemp(Gradi, From, To);
    
    
            }
    ma quando clicco sul button nel broswer ricevo un errore


    Impossibile caricare la sezione di configurazione endpoint per il contratto 'ConvertTemp.ConvertTemperatureSoap'. Trovata più di una configurazione per il contratto. Indicare la sezione di configurazione endpoint preferita per nome.

    Eccezione di tipo 'System.InvalidOperationException' in System.ServiceModel.dll non gestita nel codice utente
    su questa riga:
    ConvertTemp.ConvertTemperatureSoapClient converti = new ConvertTemp.ConvertTemperatureSoapClient();

    nei suggerimenti mi dice
    passare un nome endpoint valido al costruttore client del servizio

    quindi sono andato nelle definizioni e ho trovato che ci sono 4 overload di questo metodo

    codice:
     public ConvertTemperatureSoapClient() {
            }
            
            public ConvertTemperatureSoapClient(string endpointConfigurationName) : 
                    base(endpointConfigurationName) {
            }
            
            public ConvertTemperatureSoapClient(string endpointConfigurationName, string remoteAddress) : 
                    base(endpointConfigurationName, remoteAddress) {
            }
            
            public ConvertTemperatureSoapClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
                    base(endpointConfigurationName, remoteAddress) {
            }
            
            public ConvertTemperatureSoapClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
                    base(binding, remoteAddress) {
            }
    A questo punto mi sono impantanato perchè non ho capito cosa devo passare, dato che intanto c'è un metodo che non accetta nulla, ma comunque anche se dovessi mettere qualcosa non ho capito cosa.

    ho provato a scrivere questo
    codice:
      ConvertTemp.ConvertTemperatureSoapClient converti = new ConvertTemp.ConvertTemperatureSoapClient("http://www.webservicex.net/ConvertTemperature.asmx");
    ovvero a passargli una stringa con l'url della webservice ma nulla da fare

    potete darmi qualche dritta.
    Grazie

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    guarda il file [web.config] e vedi se c'e' una cosa tipo

    codice:
    <service name="ConvertTemperature" >
      <endpoint


    duplicata...

  3. #3
    Quote Originariamente inviata da djciko Visualizza il messaggio
    guarda il file [web.config] e vedi se c'e' una cosa tipo

    codice:
    <service name="ConvertTemperature" >
      <endpoint


    duplicata...

    Ciao Djciko, grazie
    Nel web.config (Non immaginavo che lo modificasse) visual studio ha aggiunto tutte queste righe
    questo perchè ho aggiunto più wsdl prima di trovarne una che online non desse problemi (altre gratuite davano anche nei loto test eccezioni o timeout)



    codice:
     <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding name="GlobalWeatherSoap" />
            <binding name="CurrencyConvertorSoap" />
            <binding name="ConvertTemperatureSoap" />
            <binding name="lengthUnitSoap" />
          </basicHttpBinding>
          <customBinding>
            <binding name="GlobalWeatherSoap12">
              <textMessageEncoding messageVersion="Soap12" />
              <httpTransport />
            </binding>
            <binding name="CurrencyConvertorSoap12">
              <textMessageEncoding messageVersion="Soap12" />
              <httpTransport />
            </binding>
            <binding name="ConvertTemperatureSoap12">
              <textMessageEncoding messageVersion="Soap12" />
              <httpTransport />
            </binding>
            <binding name="lengthUnitSoap12">
              <textMessageEncoding messageVersion="Soap12" />
              <httpTransport />
            </binding>
          </customBinding>
        </bindings>
        <client>
          <endpoint address="http://www.webservicex.net/globalweather.asmx"
            binding="basicHttpBinding" bindingConfiguration="GlobalWeatherSoap"
            contract="GetWeater.GlobalWeatherSoap" name="GlobalWeatherSoap" />
          <endpoint address="http://www.webservicex.net/globalweather.asmx"
            binding="customBinding" bindingConfiguration="GlobalWeatherSoap12"
            contract="GetWeater.GlobalWeatherSoap" name="GlobalWeatherSoap12" />
          <endpoint address="http://www.webservicex.com/CurrencyConvertor.asmx"
            binding="basicHttpBinding" bindingConfiguration="CurrencyConvertorSoap"
            contract="ServiceReference1.CurrencyConvertorSoap" name="CurrencyConvertorSoap" />
          <endpoint address="http://www.webservicex.com/CurrencyConvertor.asmx"
            binding="customBinding" bindingConfiguration="CurrencyConvertorSoap12"
            contract="ServiceReference1.CurrencyConvertorSoap" name="CurrencyConvertorSoap12" />
          <endpoint address="http://www.webservicex.net/ConvertTemperature.asmx"
            binding="basicHttpBinding" bindingConfiguration="ConvertTemperatureSoap"
            contract="ConvertTemp.ConvertTemperatureSoap" name="ConvertTemperatureSoap" />
          <endpoint address="http://www.webservicex.net/ConvertTemperature.asmx"
            binding="customBinding" bindingConfiguration="ConvertTemperatureSoap12"
            contract="ConvertTemp.ConvertTemperatureSoap" name="ConvertTemperatureSoap12" />
          <endpoint address="http://www.webservicex.net/length.asmx" binding="basicHttpBinding"
            bindingConfiguration="lengthUnitSoap" contract="LengthUnitConv.lengthUnitSoap"
            name="lengthUnitSoap" />
          <endpoint address="http://www.webservicex.net/length.asmx" binding="customBinding"
            bindingConfiguration="lengthUnitSoap12" contract="LengthUnitConv.lengthUnitSoap"
            name="lengthUnitSoap12" />
        </client>
      </system.serviceModel>

    A questo punto ho delle domande da farti,
    la prima come mai trovo due righe simili

    codice:
     <endpoint address="http://www.webservicex.net/length.asmx" binding="basicHttpBinding"
            bindingConfiguration="lengthUnitSoap" contract="LengthUnitConv.lengthUnitSoap"
            name="lengthUnitSoap" />
          <endpoint address="http://www.webservicex.net/length.asmx" binding="customBinding"
            bindingConfiguration="lengthUnitSoap12" contract="LengthUnitConv.lengthUnitSoap"
            name="lengthUnitSoap12" />
    2) cancello tutto il resto
    3) nel caso remotissimo (non so se può accadere) che mi debba collegare a più wsdl nello stesso progetto cosa faccio
    4) devo aggiungere qualcosa nel codice penso questo "lengthUnitSoap"?

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Guarda, ho provato ed il problema è che visual studio ti mette l'endpoint sia per Soap, sia per Soap 1.2.

    codice:
     <endpoint address="http://www.webservicex.net/ConvertTemperature.asmx"
                    binding="basicHttpBinding" bindingConfiguration="ConvertTemperatureSoap"
                    contract="ConvertTemp.ConvertTemperatureSoap" name="ConvertTemperatureSoap" />
    
    <endpoint address="http://www.webservicex.net/ConvertTemperature.asmx"
                    binding="customBinding" bindingConfiguration="ConvertTemperatureSoap12"
                    contract="ConvertTemp.ConvertTemperatureSoap" name="ConvertTemperatureSoap12" />
    ma dopo averne tolto uno (ConvertTemperatureSoap12) c'e' un altro problema:

    Impossibile stabilire la connessione. Risposta non corretta della parte connessa dopo l'intervallo di tempo oppure mancata risposta dall'host collegato 173.201.44.188:80.

    Poi ho provato con SOAPUI, puntando al WSDL: http://www.webservicex.net/ConvertTemperature.asmx?wsdl

    Richiesta:
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.webserviceX.NET/">
    <soapenv:Header/>
    <soapenv:Body>
    <web:ConvertTemp>
    <web:Temperature>100</web:Temperature>
    <web:FromUnit>degreeCelsius</web:FromUnit>
    <web:ToUnit>degreeFahrenheit</web:ToUnit>
    </web:ConvertTemp>
    </soapenv:Body>
    </soapenv:Envelope>


    Risposta (funziona):
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
    <ConvertTempResponse xmlns="http://www.webserviceX.NET/">
    <ConvertTempResult>212</ConvertTempResult>
    </ConvertTempResponse>
    </soap:Body>
    </soap:Envelope>

    Per quanto riguarda VISUAL STUDIO ed il consumo del WS da una applicazione li', non so se magari è qualcosa che litiga con il firewall da dove sono io. Non ho tempo ora di provare

    Prova a fare un tuo WS, non usare quelli pubblici. Non e' difficile
    Ultima modifica di djciko; 18-10-2016 a 00:15

  5. #5
    Mi sono riuscito a rispondere da solo.....Grazie
    Ho lasciato tutto com'era nel web.config e aggiunto questo nel codice

    LengthUnitConv.lengthUnitSoapClient ConvertitoreLung = new LengthUnitConv.lengthUnitSoapClient("lengthUnitSoa p");

    la domanda che mi resta a questo punto è , perchè ci sono 4 metodi con overload diversi??

    Grazie

    publicConvertTemperatureSoapClient(){
    }

    publicConvertTemperatureSoapClient(string endpointConfigurationName):
    base(endpointConfigurationName){
    }

    publicConvertTemperatureSoapClient(string endpointConfigurationName,string remoteAddress):
    base(endpointConfigurationName, remoteAddress){
    }

    publicConvertTemperatureSoapClient(string endpointConfigurationName,System.ServiceModel.EndpointAddress remoteAddress):
    base(endpointConfigurationName, remoteAddress){
    }

    publicConvertTemperatureSoapClient(System.ServiceModel.Channels.Binding binding,System.ServiceModel.EndpointAddress remoteAddress):
    base(binding, remoteAddress){
    }

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Puoi riferirti anche a 100 web services, il problema e' che per un binding deve essere associato solo un endpoint altrimenti non sa quale usare:

    codice:
    <system.serviceModel>
            <bindings>
                <basicHttpBinding>
                    <binding name="ConvertTemperatureSoap" />
                </basicHttpBinding>
            </bindings>
            <client>
                <endpoint address="http://www.webservicex.net/ConvertTemperature.asmx"
                    binding="basicHttpBinding" bindingConfiguration="ConvertTemperatureSoap"
                    contract="ConvertTemp.ConvertTemperatureSoap" name="ConvertTemperatureSoap" />
            </client>
    </system.serviceModel>

    il problema e' che c'e' un errore di connessione anche in questo WS pubblico. Ora non ho tempo di provare con 1.2 prova tu

  7. #7
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Cos'e' questo LengUnitConv ?
    Io ho solo aggiunto il riferimento al servizio da Visual Studio (aggiungendo la root, non il SoapClient)
    Il riferimento l'ho chiamato "ConvertTemp" ed ho provato a convertire 12 gradi Celsius in Fahrenheit


    codice:
    ConvertTemp.ConvertTemperatureSoapClient client = new ConvertTemp.ConvertTemperatureSoapClient();
    
    
    try
    {
        double TemperaturaInFahrenight = client.ConvertTemp(12, ConvertTemp.TemperatureUnit.degreeCelsius, ConvertTemp.TemperatureUnit.degreeFahrenheit);
    
        Response.Write(TemperaturaInFahrenight);
    }
    catch (Exception ex)
    {
        throw ex;
    }

    ma ti ripeto, non mi funziona va in errore. Funziona solo da SoapUI (un software per consumare web services molto noto)

  8. #8
    scusa era un'altra delle soap che stavo usando
    come ti dicevo
    questa wsdl ha quattro metodi simili che vanno in overload, quando devo richiamare gli altri?
    provo a vedere SoapUi come funziona, grazie

    public ConvertTemperatureSoapClient() {
    }

    public ConvertTemperatureSoapClient(string endpointConfigurationName) :
    base(endpointConfigurationName) {
    }

    public ConvertTemperatureSoapClient(string endpointConfigurationName, string remoteAddress) :
    base(endpointConfigurationName, remoteAddress) {
    }

    public ConvertTemperatureSoapClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
    base(endpointConfigurationName, remoteAddress) {
    }

    public ConvertTemperatureSoapClient(System.ServiceModel.C hannels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
    base(binding, remoteAddress) {
    }

  9. #9
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    mai !

    Devi richiamare da codice solo i metodi esposti, quelli che vedi qui: http://www.webservicex.net/ConvertTemperature.asmx
    Se riesci ad usare SoapUI infatti c'e' un unico metodo.

    Quella classe "reference.cs" è meglio che per ora non la guardi, è classe proxy generata da visual studio, e gli altri metodi che vedi in overload non sono della classe/interfacia principale, ma della classe client che visual studio genera per farti consumare il web service.
    Se ci fai caso c'e' anche questo:

    codice:
               
    public double ConvertTemp(double Temperature, tuoProgetto.ServiceReferenceTemp.TemperatureUnit FromUnit, tuoProgetto.ServiceReferenceTemp.TemperatureUnit ToUnit) 
    {
       return base.Channel.ConvertTemp(Temperature, FromUnit, ToUnit);
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.