Domanda

Il nostro flusso di lavoro in Workflow Foundation era utilizzato per chiamare i servizi Web ASMX utilizzando l'attività InvokeWebService , che ha una proprietà SessionId per correlare più attività in la stessa sessione (inviando il cookie di sessione ASP.NET su ogni richiesta ). Ha funzionato.

Ora siamo passati all'interfaccia del servizio Web WCF e abbiamo modificato i nostri flussi di lavoro per utilizzare invece l'attività SendActivity . Tuttavia, non abbiamo trovato alcuna soluzione per correlare le invocazioni del servizio Web, ovvero l'invio del cookie di sessione su ogni richiesta.

È possibile raggiungere questo obiettivo in WF o abbiamo bisogno di una soluzione personalizzata?

È stato utile?

Soluzione

Non sono a conoscenza di alcuna funzione integrata per la gestione dei cookie in nessuna delle attività integrazione WF / WCF ( SendActivity e ReceiveActivity ). Ciò ha senso dal momento che WCF è indipendente dal trasporto, e quindi a un livello elevato le API non possono essere accoppiate a nessuna funzionalità specifica HTTP come nel caso di Servizi Web ASMX .

Una soluzione nel tuo caso potrebbe essere quella di esporre i servizi WCF attraverso un endpoint che utilizza basicHttpBinding , che è compatibile con il protocollo supportato da ASMX Web Services, e quindi tornare a utilizzare InvokeWebServiceActivity per invocarli.

Inoltre, poiché un servizio WCF può essere esposto tramite un numero qualsiasi di endpoint , è possibile semplicemente aggiungere un endpoint che utilizza basicHttpBinding a quelli già presenti. Ecco un esempio:

<configuration>
    <system.serviceModel>
        <services>
            <service name="MyNamespace.MyServiceImpl">
                <endpoint binding="wsHttpBinding" name="WsHttp"
                    contract="MyNamespace.IMyService" />
                <endpoint address="basic" binding="basicHttpBinding" name="BasicHttp"
                    contract="MyNamespace.IMyService" />
                <host>
                    <baseAddresses>
                        <add baseAddress="http://localhost/myservice" />
                    </baseAddresses>
                </host>
            </service>
        </services>
    </system.serviceModel>
</configuration>

Quindi i flussi di lavoro che utilizzano InvokeWebServiceActivity invocherebbero il servizio utilizzando il seguente URL:

  

http: // localhost / myservice / basic

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top