मुझे एक खराब आर्किटेक्टेड समाधान द्वारा काट दिया गया है। यह धागा सुरक्षित नहीं है!थ्रेड-सुरक्षित उपयोग के लिए स्थिर वर्ग के दायरे को सीमित करने के लिए AppDomain का उपयोग कैसे करें?
मेरे पास समाधान में कई साझा वर्ग और सदस्य हैं, और विकास के दौरान सभी शांत थे ...
बिज़टॉक ने मेरे युद्ध जहाज को डूब दिया है।
हम अपने असेंबली को कॉल करने के लिए एक कस्टम बिज़टॉक एडाप्टर का उपयोग कर रहे हैं। एडाप्टर मेरे कोड को कॉल कर रहा है और चीजों को समानांतर में चला रहा है, इसलिए मुझे लगता है कि यह एक ही ऐपडोमेन के तहत कई धागे का उपयोग कर रहा है।
मैं क्या करना चाहता हूं कि मेरा कोड अपने ऐपडोमेन के तहत चलाए, इसलिए साझा की गई समस्याएं एक-दूसरे के साथ नहीं मिलेंगी।
मेरे पास एक बहुत ही सरल वर्ग है कि बिज़टॉक एडाप्टर तत्काल प्रक्रिया() विधि चला रहा है।
मैं अपनी प्रक्रिया() विधि के अंदर एक नया ऐपडोमेन बनाना चाहता हूं, इसलिए जब भी बिज़टॉक एक और थ्रेड स्पिन करता है, तो इसमें स्थिर वर्गों और विधियों का अपना संस्करण होगा।
BizTalkAdapter कोड:
public class Loader
{
private string connectionString;
private string fileName;
private Stream stream;
private DataFile dataFile;
public Loader(Stream stream, string fileName, string connectionString)
{
this.connectionString = connectionString;
this.fileName = fileName;
this.stream = stream;
}
public void Process()
{
//***** Create AppDomain HERE *****
// run following code entirely under that domain
dataFile = new DataFile(aredStream, fileName, connectionString);
dataFile.ParseFile();
dataFile.Save();
// get rid of the AppDomain here...
}
}
FYI करें:
// this is inside the BizTalkAdapter and it is calling the Loader class //
private void SendMessage(IBaseMessage message, TransactionalTransmitProperties properties)
{
Stream strm = message.BodyPart.GetOriginalDataStream();
string connectionString = properties.ConnectionString;
string msgFileName = message.Context.Read("ReceivedFileName", "http://schemas.microsoft.com/BizTalk/2003/file-properties") as string;
Loader loader = new Loader(strm, msgFileName, connectionString);
loader.Process();
EventLog.WriteEntry("Loader", "Successfully processed: " + msgFileName);
}
इस वर्ग BizTalk कॉल है लोडर वर्ग datafile वर्ग से एक अलग DLL में है।
किसी भी मदद की सराहना की जाएगी। मैं थ्रेड-सेफ कोड बनाने पर काम करना जारी रखूंगा, लेकिन मुझे लगता है कि यह "सरल" जवाब हो सकता है।
किसी को भी किसी भी अन्य सोचा है, तो में बस संपूर्णता के लिए
कीथ
फेंक दें।
धन्यवाद,।
मैं मिला है कि अगर मैं "के रूप में आदेश दिया वितरण" "परिवहन उन्नत विकल्प" संवाद मैं बहु धागा मुद्दों मैं हो रही थी से बचने के लिए कर रहा था में भेजने एडाप्टर चिह्नित।
मुझे लगता है कि यह मेरी समस्या का एक और संभावित उत्तर है, लेकिन आवश्यक रूप से प्रश्न के लिए नहीं है।
तो आप स्थैतिक वर्गों और वस्तुओं के बारे में बात नहीं कर रहे हैं, आप एक उदाहरण के बारे में बात कर रहे हैं, है ना? –