Saturday, December 13, 2008

Invocare Web Service da Workflow

. Saturday, December 13, 2008

Invocare un web service da un workflow è un'operazione abbastanza semplice, basta far uso dell'activity InvokeWebServiceActivity.
Ma vediamo più nel dettaglio quali passi sono necessari per raggiungere lo scopo.
Per usare l'InvokeWebServiceActivity bisogna aggiungere un web reference al progetto che contiene il nostro workflow:
WebServiceWF1
WebServiceWF2
Tramite il property ProxyClass dell'activity andiamo ad indicare il nome della proxy class attraverso cui possiamo invocare il web service
Mentre con il property MethodName indichiamo il nome del metodo sul web service che vogliamo invocare.
Supponendo di avere il seguente web service con il classico metodo HelloWorld:

   1: public class Service : System.Web.Services.WebService
   2: {
   3:   public Service () {
   4:       //Uncomment the following line if using designed components 
   5:       //InitializeComponent(); 
   6:   }
   7:  
   8:   [WebMethod]
   9:   public string HelloWorld() {
  10:       return "Hello World1";
  11:   }  
  12: }


l'activity InvokeWebServiceActivity sarà così impostato:

WebServiceWF3 
Il valore di ritorno del metodo HelloWorld, come si può notare dall'immagine, è bindato al dependency property MyReturnValue.
A questo punto dell'opera può, però, sorgere un dubbio.
Ma se si vuole modificare l'url usato per invocare il web service?
In tal caso a seconda di come è stato strutturato il progetto si può agire in maniera diversa ma in linea di massima si può intervenire nell'evento Invoking dell'activity.
Questo evento scatta prima che il web service sia chiamato.
Così facendo possiamo modificare a runtime il property Url:


   1: private void invokeWebServiceActivity1_Invoking(object sender, 
InvokeWebServiceEventArgs e)
   2: {
   3:   WSTest.Service serProxy = (WSTest.Service)e.WebServiceProxy;
   4:   serProxy.Url = "http://localhost/WSTest2/Service.asmx";
   5: }

Ma per rendere dinamico il property Url l'approcio migliore è quello di creare una chiave, nel web.config in caso di applicazione web Asp.Net o app.config in caso di applicazione windows (nel caso specifico l'applicazione che fa da host del runtime è una web application):


   1: <appSettings>
   2:   <add key="WSTestUrl" value="http://localhost/WSTest2/Service.asmx"></add>
   3: </appSettings>


Con questo altro tassello, il codice precedente può diventare:

   1: private void invokeWebServiceActivity1_Invoking(object sender, 
   2:             InvokeWebServiceEventArgs e)
   3: {
   4:   WSTest.Service serProxy = (WSTest.Service)e.WebServiceProxy;
   5:   serProxy.Url = ConfigurationSettings.AppSettings["WSTestUrl"].ToString();
   6: }

0 commenti:

Post a Comment