Client con più proxy e callback multithreading

3

Ho creato un servizio web sessionful usando WCF, e in particolare ho usato il binding NetTcpBinding . Oltre ai metodi per avviare e terminare una sessione, altri metodi consentono al client di inviare a una o più attività da eseguire (i risultati vengono restituiti tramite richiamata, quindi il servizio è duplex), ma consentono anche di conoscere lo stato del servizio.

Supponendo di attivare lo stesso servizio su più endpoint e supponendo che il client conosca questi endpoint (ad esempio, potrebbe mantenere un List di endpoint), il client deve connettersi con una o più repliche dello stesso servizio. Il client aggiorna periodicamente lo stato del servizio, quindi quando deve eseguire una nuova attività (l'attività viene inviata dall'utente tramite l'interfaccia utente), seleziona il servizio attualmente meno caricato e invia l'attività ad esso. Periodicamente, il client avvia anche una procedura di manutenzione per disconnettersi da uno o più servizi sovraccaricati e per connettersi con nuovi servizi.

Ho creato un proxy client usando lo strumento svcutil . Vorrei che ogni proxy possa essere usato simultaneamente da diversi thread, per esempio, oltre al thread che invia le attività usando un proxy, ci sono anche i seguenti due thread che agiscono periodicamente:

  • un thread che invia periodicamente una richiesta al servizio per ottenere lo stato aggiornato;
  • un thread che seleziona periodicamente un proxy per chiudere e istanzia un nuovo proxy per sostituire quello chiuso.

Per raggiungere questi obiettivi, è sufficiente creare una serie di proxy e gestirne l'apertura e la chiusura in thread separati? Penso di aver letto che le chiamate al metodo proxy sono thread-safe, quindi non avrei bisogno di eseguire un lock prima di richiedere aggiornamenti al servizio. Tuttavia, quando la procedura di manutenzione (che viene attivata sul proprio thread) decide di chiudere un proxy, dovrei eseguire un blocco?

Infine, ogni proxy è anche associato a un oggetto che implementa l'interfaccia di callback per il servizio: i callback (richiamati sul client) eseguiti su thread differenti sul client?

Vorrei racchiudere la gestione del proxy in una o più classi in modo che possa essere gestita facilmente all'interno di un'applicazione WPF.

    
posta enzom83 18.07.2012 - 10:38
fonte

1 risposta

1

Ho creato una classe SingleTon che può essere utilizzata per gestire questo proxy.

/// <summary>
/// Singleton Pattern
/// <para>ConnectionHelper provides connection to the Server.</para>
/// </summary>
public sealed class ConnectionHelper
{
    private static readonly ConnectionHelper instance = new ConnectionHelper();
    /// <summary>
    /// Provides a readonly Instance to "ConnectionHelper" class.
    /// </summary>
    public static ConnectionHelper Instance
    {
        get
        {
            return instance;
        }
    }
    /// <summary>
    /// Provides access to IServer members.
    /// </summary>
    public ServerProxy ServerProxyInstance { get; set; }

    /// <summary>
    /// Gets or sets the peer vue communication URL.
    /// </summary>
    /// <value>The peer vue communication URL.</value>
    public string CommunicationURL
    {
        get;
        set;
    }

    .....
    ...
    ..
}
    
risposta data 18.07.2012 - 15:25
fonte

Leggi altre domande sui tag