Domanda

Ho recentemente incontrato un problema con la natura multi-threaded del BizTalk Mapper e come gestisce assembly esterni.

Come questa citazione da MSDN indica:

  

Importante Qualsiasi codice scritto in un   montaggio esterno per uso in un   functoid di script deve essere thread   sicuro. Questo è necessario perché   più istanze di una mappa possono utilizzare   queste istanze .NET in fase di esecuzione sotto   condizioni di stress.

Il Mapper riutilizzerà le istanze di assembly esterni.

In un assieme di utilità mia squadra stava usando abbiamo avuto il seguente codice:

public class MapUtil
{
    private string _storeReference;

    public void SetStoreReference(string ref)
    {
       _storeReference = ref;
    }

    public string GetStoreReference()
    {
        return _storeReference;
    }
}

Questo stava causando storereferences da un file ad essere mappato file diversi.

I (apparire) di aver risolto questo decorando il campo privato con [ThreadStatic]

[ThreadStatic]
private static string _storeReference;

La mia domanda è - qualcuno sa di eventuali problemi con questo nel BizTalk Mapper? Sono consapevole che ci sono problemi con [ThreadStatic] in Asp.Net per examble, a causa di discussioni di essere riutilizzati, ma riesco a trovare alcuna documentazione sul modo in cui il BizTalk Mapper con fili.

È stato utile?

Soluzione 2

Non ho ancora trovato una dichiarazione definitiva sulla falsariga di 'Il comportamento filettatura all'interno del BizTalk Mapper è xyz, così si dovrebbe prendere cura di utilizzare il metodo abc' e io non sono sicuro che una tale risposta sta andando provenire da qualsiasi luogo al di fuori del team di prodotto di BizTalk.

Il mio unico collega con contatti diretti per il team del prodotto è in congedo di Natale esteso (lucky cane) in modo fino al suo ritorno Ho solo pensato che avrei notare che con la modifica apportata al nostro codice non abbiamo visto una sola ricorrenza del threading problemi su un server di alta produzione in serie.

Bene - che non è del tutto vero, sono riuscito a perdere la parola chiave static da una proprietà sulla mia classe di supporto e per quella proprietà che abbiamo fatto ancora vedere i problemi di threading. Lo prendo come prova di ThreadStatic essere la strada giusta da percorrere per ora.

Altri suggerimenti

Ho usato ThreadStatic per impostare una variabile è pipeline di ricezione personalizzata e quindi accedere il suo valore all'interno di BizTalk Map (attraverso una classe di supporto). Non hanno avuto alcun problema fino ad ora -. testata con ~ 50 invocazioni in parallelo

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