Download
slide1 n.
Skip this Video
Loading SlideShow in 5 Seconds..
Corso di Informatica industriale PowerPoint Presentation
Download Presentation
Corso di Informatica industriale

Corso di Informatica industriale

157 Views Download Presentation
Download Presentation

Corso di Informatica industriale

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Creazione e pubblicazione di un web service in Visual Studio 2005 Corso di Informatica industriale Prof. Ing. Salvatore Cavalieri Ing. Giovanni Cutuli

  2. I web service Il web service è un sistema software progettato per supportare il concetto di interoperabilità fra diversi host all'interno di una rete L' interfaccia è definita utilizzando WSDL La comunicazione avviene mediante SOAP I messaggi sono trasportati dal protocollo HTTP I messaggi sono formattati in XML

  3. XML L'HTML è un linguaggio creato principalmente per la descrizione e la formattazione di pagine web mentre XML è un metalinguaggio utilizzato per creare nuovi linguaggi, atti a descrivere documenti strutturati. In HTML si hanno un insieme già definito di tag utilizzabili per la creazione delle pagine, mentre in XML è invece possibile definirne di propri a seconda delle esigenze. <?xml version="1.0" ?> <utenti> <utente> <nome>Mario</nome> <cognome>Rossi</cognome> </utente> <utente> <nome>Max</nome> <cognome>Verdi</cognome> </utente> </utenti>

  4. Creazione di un servizio Web • Passo 1: Creazione nuovo progetto in VS 2005 • Passo 2: Creazione di un servizio ASP. NET

  5. Creazione di un servizio Web • Passo 3: Esempio automatico “HelloWorld” nel file Service.asmx

  6. Creazione di un servizio Web • Passo 4: Avviare il debug del servizio web • Passo 5: Creazione file di configurazione del servizio Web

  7. Creazione di un servizio Web • Passo 6: Avvio del server di sviluppo integrato ASP.NET • Passo 7: Test del servizio Web

  8. Creazione di un servizio Web • Passo 8: Richiamare un servizio pubblicato dal web service • Passo 9: Risultato della chiamata al web service

  9. Il file WSDL La descrizione dei servizi esportati dal web service è fatta in WSDL ed inserita in un opportuno file che avrà estensione “wsdl”. E’ possibile prendere visione del file aggiungendo la stringa “?WSDL” alla fine dell’ URL del web service. Esempio: Se l’URL del web service è: http://localhost:1139/WebService/Service.asmx Allora la relativa descrizione dei servizi si otterrà col seguente URL http://localhost:1139/WebService/Service.asmx?WSDL

  10. Il file WSDL

  11. Pubblicazione del servizio • Passo 1: Predisporre una directory sotto C:\Inetpub\wwwroot di nome “prova_sito” dove andranno posizionati i file necessari per il corretto funzionamento del servizio web. Dopo aver creato la cartella bisogna modificare i permessi sulla cartella appena creata altrimenti il servizio web non potrà funzionare ed ovviamente avviare IIS sull’ indirizzo localhost. Per pubblicare il servizio Web dopo averlo sviluppato e testato è necessario farlo riconoscere ad IIS. Con la seguente procedura si pubblicherà il servizio Web in modo che non utilizzi più il server di sviluppo ASP.NET bensì IIS.

  12. Pubblicazione del servizio

  13. Pubblicazione del servizio

  14. Pubblicazione del servizio • Passo 2: Utilizzare la procedura guidata Per pubblicare il servizio Web dopo averlo sviluppato e testato è necessario farlo riconoscere ad IIS. Con la seguente procedura si pubblicherà il servizio Web in modo che non utilizzi più il server di sviluppo ASP.NET bensì IIS.

  15. Pubblicazione del servizio • Passo 3: Configurare il servizio web • Passo 4: Testare il servizio web http://indirizzoIP/prova_sito/Service.asmx

  16. Pubblicazione del servizio • Problemi di funzionamento: Se si riscontrano problemi di funzionamento dovuto ad errori sul file di configurazione (.config) molto probabilmente non si sta utilizzando la versione corretta del framework .NET. E’ necessario quindi selezionare quella corretta col seguente comando lanciato dal prompt: C:\Windows\Microsoft.NET\Framework\v2.0.50215\aspnet_regiis.exe –i E dopo riavviare Internet Information Service col comando iisreset

  17. Creazione di un client • Passo 1: Creazione di un nuovo progetto in Visual Studio 2005

  18. Creazione di un client • Passo 2: Creazione di una console application

  19. Creazione di un client • Passo 3: E’ necessario aggiungere un riferimento Web nel progetto per permettere al client di dialogare col servizio web precedentemente creato.

  20. Creazione di un client • Passo 4: Cercare il servizio fra i servizi locali

  21. Creazione di un client • Passo 5: Selezionare il servizio desiderato

  22. Creazione di un client • Passo 6: aggiungere il riferimento al progetto rinominandolo come “Servizio”. Se dovessero esserci problemi controllare l’indirizzo del server

  23. Creazione di un client • Il riferimento appena inserito dovrà apparire fra i file coinvolti nel progetto.

  24. Creazione di un client • Passo 7: Creazione di un oggetto che rappresenta il servizio web. A questo punto è possibile invocare tutti i metodi del servizio web come se fossero locali.

  25. La parola chiave out in C# In C# con la parola chiave out gli argomenti saranno passati per riferimento. Funzionalità simile offre la parola chiave ref, solo che se si sceglie di utilizzare ref la variabile passata alla funzione deve essere prima inizializzata. Per utilizzare un parametro out, è necessario che la definizione del metodo e il metodo chiamante utilizzino in modo esplicito la parola chiave out.

  26. Esempio

  27. Esempio

  28. Funzioni e strutture dati in OPC XML-DA Corso di Informatica industriale Prof. Ing. Salvatore Cavalieri Ing. Giovanni Cutuli

  29. OPC XML DA Per lo scambio dati fra client e server sono previste determinate strutture dati che servono ad inglobare al loro interno le varie informazioni da inviare al web service e di conseguenza le informazioni di risposta che il web service invia al client.

  30. GetStatus (string LocaleID, string ClientRequestHandle, out ServerStatus Status) GetStatusResponse (ReplyBase Response, ServerStatus Status) • string statusInfoField; • string vendorInfoField; • string[] supportedLocaleIDsField; • interfaceVersion[] supportedInterfaceVersionsField; • DateTime startTimeField; • string productVersionField • DateTime rcvTimeField; • DateTime replyTimeField; • string clientRequestHandleField; • string revisedLocaleIDField; • serverState serverStateField; Esempio di scambio dati (GetStatus) Server OPC XML-DA Client OPC XML-DA

  31. Read (RequestOptions Options, ReadRequestItemList ItemList, out ReplyItemList RItemList, out OPCError[] Errors) ReadResponse (ReplyBase ReadResult, ReplyItemList RItemList, OPCError[] Errors) • stringItemPath • QName ReqType • int MaxAge • ReadRequestItem[] Items • boolean ReturnErrorText • boolean ReturnDiagnosticInfo • boolean ReturnItemTime • boolean ReturnItempath • … Esempio di scambio dati (Read) Server OPC XML-DA Client OPC XML-DA

  32. Write (RequestOptions Options, WriteRequestItemList ItemList, bool ReturnValuesOnReply, out ReplyItemList RItemList, out OPCError[] Errors) WriteResponse (ReplyBase WriteResult, ReplyItemList RItemList, OPCError[] Errors) • ItemValue[] Items Esempio di scambio dati (Write) Server OPC XML-DA Client OPC XML-DA • boolean ReturnErrorText • boolean ReturnDiagnosticInfo • boolean ReturnItemTime • boolean ReturnItempath • …

  33. Subscribe (RequestOptions Options, SubscribeRequestItemList ItemList, bool ReturnValuesOnReply, int SubscriptionPingRate, out SubscribeReplyItemList RItemList, out OPCError[] Errors, out string ServerSubHandle) Esempio di scambio dati (Subscribe) Server OPC XML-DA Client OPC XML-DA SubscribeResponse (ReplyBase SubscribeResult, SubscribeReplyItemList RItemList, OPCError[] Errors, string ServerSubHandle) • SubscribeRequestItem[] Items

  34. Esempio di scambio dati (Subscription Polled Refresh) Server OPC XML-DA Client OPC XML-DA SubscriptionPolledRefresh(RequestOptions Options, string[] ServerSubHandles, System.DateTime HoldTime, bool HoldTimeSpecified, int WaitTime, bool ReturnAllItems, out string[] InvalidServerSubHandles, out SubscribePolledRefreshReplyItemList[] RItemList, out OPCError[] Errors, out bool DataBufferOverflow) SubscriptionPolledRefreshResponse(ReplyBase SubscriptionPolledRefresh Result, string[] InvalidServerSubHandles, SubscribePolledRefreshReplyItemList[] RItemList, OPCError[] Errors, bool DataBufferOverflow)

  35. SubscriptionCancel Response (string ClientRequestHandle) Esempio di scambio dati (Subscription Cancel) Server OPC XML-DA Client OPC XML-DA SubscriptionCancel(string ServerSubHandle, ref string ClientRequestHandle)

  36. Esempio di scambio dati (Browse) Server OPC XML-DA Client OPC XML-DA Browse (System.Xml.XmlQualifiedName[] PropertyNames, string LocaleID, string ClientRequestHandle, string ItemPath, string ItemName, ref string ContinuationPoint, int MaxElementsReturned, browseFilter BrowseFilter, string ElementNameFilter, string VendorFilter, bool ReturnAllProperties, bool ReturnPropertyValues, bool ReturnErrorText, out BrowseElement[] Elements, out OPCError[] Errors, out bool MoreElements) BrowseResponse(ReplyBase BrowseResult, BrowseElement[] Elements, OPCError[] Errors, bool MoreElements) • Enumeration {all, branch, item} • string ItemPath • string ItemName • bool IsItem • bool HasChildren • ItemProperty[] Properties

  37. Esempio di scambio dati (Get Properties) Server OPC XML-DA Client OPC XML-DA GetProperties(ItemIdentifier[] ItemIDs, System.Xml.XmlQualifiedName[] PropertyNames, string LocaleID, string ClientRequestHandle, string ItemPath, bool ReturnAllProperties, bool ReturnPropertyValues, bool ReturnErrorText, out PropertyReplyList[] PropertyLists, out OPCError[] Errors) GetProperties Response(ReplyBaseGetProperties Result, PropertyReplyList[] PropertyLists,OPCError[] Errors) • ItemProperty[] Properties • string Description • string ItemPath • string ItemName • …

  38. WSDL per GetStatus <s:element name="GetStatus"> <s:complexType> <s:attribute name="LocaleID" type="s:string" /> <s:attribute name="ClientRequestHandle" type="s:string" /> </s:complexType> </s:element> <s:element name="GetStatusResponse"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="GetStatusResult" type="s0:ReplyBase" /> <s:element minOccurs="0" maxOccurs="1" name="Status" type="s0:ServerStatus" /> </s:sequence> </s:complexType> </s:element> <s:complexType name="ReplyBase"> <s:attribute name="RcvTime" type="s:dateTime" use="required" /> <s:attribute name="ReplyTime" type="s:dateTime" use="required" /> <s:attribute name="ClientRequestHandle" type="s:string" /> <s:attribute name="RevisedLocaleID" type="s:string" /> <s:attribute name="ServerState" type="s0:serverState" use="required" /> </s:complexType>

  39. Il file WSDL ufficiale di OPC XML-DA Corso di Informatica industriale Prof. Ing. Salvatore Cavalieri Ing. Giovanni Cutuli

  40. Compilatore WSDL Per compilare il file WSDL ufficiale di OPC foundation è necessario un tool presente in Visual Studio 2005. Il tool in questione è il compilatore WSDL invocabile col comando “wsdl”. Il comando WSDL è visibile, per impostazione predefinita, soltanto dal prompt dei comandi di Visual Studio.

  41. In cui: • <opzioni>: rappresenta l’insieme di opzioni di compilazione • <url o percorso>: indica il percorso del file WSDL da compilare Compilatore WSDL Basta lanciare il comando wsdl senza parametri per ottenere l’ elenco delle opzioni disponibili. La forma generale di utilizzo del compilatore è la seguente:

  42. Compilatore WSDL Le opzioni più importanti, che saranno usate in seguito, sono: “/language: <linguaggio>” opzione che serve a specificare in che linguaggio creare la classe (default: c#) “/namespace: <spaziodeinomi>” opzione che serve a definire lo spazio dei nomi “/out:<nomefile>” opzione che serve a definire un nome per il file di output generato alla fine della compilazione (il nome della classe è Service)

  43. WSDL file Compilatore WSDL Classe “proxy” client Creazione OPC Client • Passo 1: Creazione classe proxy del client che conterrà tutti i metodi, strutture dati e tutto il necessario per una buona programmazione e un buon funzionamento del client OPC • Il comando da lanciare per ottenere la classe proxy client in C# (di nome Service) e memorizzarla nel file ClientProxy.cs è il seguente: wsdl /language:cs /out:ClientProxy.cs OPC.wsdl

  44. Creazione OPC Client • Quello che si ottiene è una classe definita cosi: • public partial class Service : System.Web.Services.Protocols.SoapHttpClientProtocol • { • //codice del client • } • La parola chiave partial in C# consente di definire classi, metodi e strutture dati in generale all’interno di diversi file che verranno “unificati” in fase di compilazione.

  45. Creazione OPC Client • Passo 2: Creare una console application in Visual Studio 2005 per poter costruire il client OPC

  46. Creazione OPC Client • Passo 3: Aggiungere i riferimenti a System.Web e System.Web.Services • Passo 4: Aggiungere al progetto il file ClientProxy.cs

  47. Creazione OPC Client • Passo 5 (opzionale): Includere la classe ProxyClient al namespace del progetto • namespace ConsoleApplication • { • //ProxyClient code • } • In questo modo la classe ProxyClient farà parte dello stesso spazio dei nomi del programma principale (main) che rappresenta il client OPC

  48. Creazione OPC Client • Passo 6: Sviluppare il client OPC. Prima cosa da fare instanziare un oggetto che rappresenta il server OPC con il quale dialogare definendo l’ URL al quale si trova.

  49. Creazione OPC Client (GetStatus) • Passo 7: Sviluppare i vari metodi del client OPC.

  50. Stampa dei risultati (GetStatus)