Windows Workflow InvokeWebService Activity and Client Credentials

En los últimos meses he estado ya más que aburrido en Microsoft Workflow Foundation, una relativamente impresionante framework de creación de flujos de trabajo de forma declarativa (o por lo menos así lo mencionan teóricamente, luego conversamos más de esto). Hoy mi cliente me menciona que uno de sus workflows no funciona, si, así de descriptivo…

Revisando el tracelog del proceso me doy cuenta que simplemente se debe a que dentro del Workflow existe una InvokeWebService Activity, yep, esta es una actividad de Workflow Foundation 3.0 diseñada para consumir viejos servicios ASMX.

Como recordaremos nuestro viejo ASMX no soporta configurar cosas como credenciales desde el archivo de configuración (como lo soporta WCF obviamente) y esto puede hacerse fácilmente desde código, el problema es que a “simple vista” nuestra InvokeWebService Activity no presenta una forma de cambiar las credenciales, es cuando un poco de lectura en MSDN nos ayuda enormemente :)

Bien, si bien no podemos “settear” las credenciales de un webservice directamente en el designer, lo podemos hacer en “código” antes que el servicio sea invocado, eso lo logramos con un handler al evento Invoking

Lo demás es simple manejo de credenciales en ASMX webservices.

// C# Code: Dentro del codebehind del workflow
protected void InvokeWebService_Invoking(Object sender, InvokeWebServiceEventArgs e) {
    var proxy = e.WebServiceProxy as MyWebServiceDefinition;
    if (proxy == null) return;
    proxy.ClientCrendetials =
        new System.Net.NetworkCredential("usuario", "password");
}
' VB Code
Public Sub InvokeWebService_Invoking(e As InvokeWebServiceEventArgs)
    Dim proxy = CType(e.WebServiceProxy, MyWebServiceDefinition)
    If proxy IsNot Nothing Then
        proxy.Credentials = New System.Net.NetworkCredentials("usuario", "password")
    End If
End Sub

Ojo con las definiciones anteriores, WebServiceProxy retorna tipo Object, por lo que hay que castearlo al tipo del webservice en específico.

Suficiente Workflow Foundation por hoy… Por cierto, les interesa el tema? ¿les gustaría más de WF en el futuro?

Saludos!

This entry was posted in development and tagged , . Bookmark the permalink.
  • Ricardo

    Quien no ha tenido este tipo de problemas con los ASMX pero verlo del lado de Workflow foundation me parece interesante, Y yo me apunto para mas entregas de WF pues quisiera entrarle al WF, si das las mejores practicas pues que mejor!

    Saludos Cristian!

  • Ricardo

    Quien no ha tenido este tipo de problemas con los ASMX pero verlo del lado de Workflow foundation me parece interesante, Y yo me apunto para mas entregas de WF pues quisiera entrarle al WF, si das las mejores practicas pues que mejor!

    Saludos Cristian!

  • aramgt

    Quien no ha tenido este tipo de problemas con los ASMX pero verlo del lado de Workflow foundation me parece interesante, Y yo me apunto para mas entregas de WF y quisiera entrarle al WF y si das las mejores practicas pues que mejor!

    Saludos Cristian!

  • Felipe

    estoy tratando de comunicarme con los web services sharepoint 2008 atravez de workflow fundation 2008 y no me arroja nada y tampoco me crea la carpeta que quiero, lo estoy asiendo asiendo atravez de invokewebservice hay que tener alguna consideracion o tines un ejemplo donde poder comparar.

  • Felipe

    estoy tratando de comunicarme con los web services sharepoint 2008 atravez de workflow fundation 2008 y no me arroja nada y tampoco me crea la carpeta que quiero, lo estoy asiendo asiendo atravez de invokewebservice hay que tener alguna consideracion o tines un ejemplo donde poder comparar.

  • Felipe

    estoy tratando de comunicarme con los web services sharepoint 2008 atravez de workflow fundation 2008 y no me arroja nada y tampoco me crea la carpeta que quiero, lo estoy asiendo asiendo atravez de invokewebservice hay que tener alguna consideracion o tines un ejemplo donde poder comparar.