লেনদেনস্কোপ স্বয়ংক্রিয়ভাবে কিছু মেশিনে এমএসডিটিসিতে চলেছে?


284

আমাদের প্রকল্পে আমরা আমাদের লেনদেনের মাধ্যমে ডেটা অ্যাক্সেস স্তরটি এর ক্রিয়া সম্পাদন করে তা নিশ্চিত করতে লেনদেনস্কোপ ব্যবহার করি। আমরা নিশানা করছি না MSDTC সেবা প্রয়োজন, আমাদের শেষ ব্যবহারকারীর মেশিনে সক্রিয় করা।

সমস্যাটি হল, আমাদের বিকাশকারীদের অর্ধেক মেশিনে আমরা এমএসডিটিসি অক্ষম হয়ে চালাতে পারি। অন্য অর্ধেকের অবশ্যই এটি সক্ষম থাকতে হবে অথবা তারা "[এমএসডিটিসি অন [সার্ভার] অনুপলব্ধ" ত্রুটি বার্তাটি পান।

এটি সত্যই আমাকে আমার মাথা আঁচড়ে গেছে এবং ADO.NET লেনদেনের বস্তুর উপর ভিত্তি করে কোনও হোম-স্প্যান ট্রানজেকশনস্কোপের মতো সমাধানটিতে ফিরে যাওয়ার বিষয়টি গুরুত্ব সহকারে বিবেচনা করেছে। এটা তোলে আপাতদৃষ্টিতে পাগলামি - আমাদের ডেভেলপার অর্ধেক হচ্ছে সে বিষয়ে একই কোডটি কাজ (এবং ধাপে ধাপে বৃদ্ধি করে না) করে অন্যান্য ডেভেলপার এর উপর ধাপে ধাপে বৃদ্ধি।

আমি কেন ট্রেসির আরও উত্তরের জন্য প্রত্যাশা করছিলাম কেন ডিটিসিতে লেনদেন বাড়ানো হয়েছিল তবে দুর্ভাগ্যক্রমে এটি হয় না।

এখানে কোডের একটি নমুনা বিট যা সমস্যার সৃষ্টি করবে, যে মেশিনগুলি আরও বাড়ানোর চেষ্টা করে, এটি দ্বিতীয় সংযোগে আরও বাড়ানোর চেষ্টা করে O খোলা () এবং (হ্যাঁ, অন্য কোনও সংযোগ খোলা নেই))

using (TransactionScope transactionScope = new TransactionScope() {
   using (SqlConnection connection = new SqlConnection(_ConStr)) {
      using (SqlCommand command = connection.CreateCommand()) {
         // prep the command
         connection.Open();
         using (SqlDataReader reader = command.ExecuteReader()) {
            // use the reader
            connection.Close();
         }
      }
   }

   // Do other stuff here that may or may not involve enlisting 
   // in the ambient transaction

   using (SqlConnection connection = new SqlConnection(_ConStr)) {
      using (SqlCommand command = connection.CreateCommand()) {
         // prep the command
         connection.Open();  // Throws "MSDTC on [SERVER] is unavailable" on some...

         // gets here on only half of the developer machines.
      }
      connection.Close();
   }

   transactionScope.Complete();
}

আমরা সত্যই খনন করেছি এবং এটি বের করার চেষ্টা করেছি। এটি যে মেশিনগুলিতে কাজ করে সেগুলি সম্পর্কে এখানে কিছু তথ্য রয়েছে:

  • দেব 1: উইন্ডোজ 7 x64 এসকিউএল 2003
  • দেব 2: উইন্ডোজ 7 x86 এসকিউএল 2003
  • দেব 3: উইন্ডোজ 7 x64 এসকিউএল 20035 এসকিউএল 2003

বিকাশকারীরা এটিতে কাজ করে না:

  • দেব 4: উইন্ডোজ 7 x64, এসকিউএল 2003 এসকিউএল 2003
  • দেব 5: উইন্ডোজ ভিস্তা x86, এসকিউএল 2003 5
  • দেব 6: উইন্ডোজ এক্সপি এক্স 86, এসকিউএল 2003 5
  • আমার হোম পিসি: উইন্ডোজ ভিস্তা হোম প্রিমিয়াম, x86, এসকিউএল 2003

আমার যুক্ত করা উচিত যে সমস্ত মেশিন, সমস্যাটি অনুসন্ধানের প্রয়াসে মাইক্রোসফ্ট আপডেট থেকে পাওয়া সমস্ত কিছুতে পুরোপুরি প্যাচ হয়ে গেছে।

আপডেট 1:

  • http://social.msdn.microsoft.com/forums/en-US/windowstransferencesprogramming/thread/a5462509-8d6d88-aefa-a197456081d3/ একই ধরণের সমস্যার বর্ণনা দেয় ... 2006 সালে!
  • http://msdn.microsoft.com/en-us/library/system.transferences.transferencescope%28VS.80%29.aspx - কোড নমুনাটি পড়ুন, এটি স্পষ্টভাবে একটি নেস্টেড-সেকেন্ড সংযোগ প্রদর্শন করে (দ্বিতীয় এসকিউএল সার্ভারের সাথে, আসলে) যা ডিটিসি-তে বাড়বে। আমরা আমাদের কোডে এটি করছি না - আমরা বিভিন্ন এসকিউএল সার্ভার ব্যবহার করি না, না আলাদা সংযোগের স্ট্রিং ব্যবহার করি না, না আমাদের গৌণ সংযোগগুলি খোলা থাকে - ডিটিসি তে বাড়ানো উচিত নয়
  • http://davidhayden.com/blog/dave/archive/2005/12/09/2615.aspx (2005 থেকে) এসকিউএল 2000 এ সংযুক্ত হওয়ার সময় কীভাবে ডিটিসি-তে বাড়ানো সর্বদা ঘটবে তা সম্পর্কে আলোচনা করে। আমরা এসকিউএল 2003/2008 ব্যবহার করছি
  • লেনদেনের বৃদ্ধির বিষয়ে http://msdn.microsoft.com/en-us/library/ms229978.aspx MSDN।

সেই এমএসডিএন লেনদেন-ক্রমবর্ধমান পৃষ্ঠাতে বলা হয়েছে যে নিম্নলিখিত শর্তগুলির কারণে ডিটিসিতে লেনদেন বাড়ানো হবে:

  1. কমপক্ষে একটি টেকসই সংস্থান যা একক-পর্যায়ের বিজ্ঞপ্তিগুলিকে সমর্থন করে না লেনদেনে তালিকাভুক্ত।
  2. কমপক্ষে দুটি টেকসই সংস্থান যা একক-পর্বের বিজ্ঞপ্তিগুলিকে সমর্থন করে লেনদেনে তালিকাভুক্ত। উদাহরণস্বরূপ, এর সাথে একটি একক সংযোগ তালিকাভুক্তি কোনও লেনদেনের প্রচারের কারণ হয় না। যাইহোক, আপনি যখনই কোনও ডাটাবেসের সাথে দ্বিতীয় সংযোগ খোলেন যার ফলে ডাটাবেস তালিকাভুক্ত হয়, সিস্টেম.অনলম্বন অবকাঠামো সনাক্ত করে যে এটি লেনদেনের দ্বিতীয় টেকসই উত্স, এবং এটি এমএসডিটিসি লেনদেনে বাড়িয়ে তোলে।
  3. একটি আলাদা অ্যাপ্লিকেশন ডোমেন বা বিভিন্ন প্রক্রিয়াতে লেনদেনের "মার্শাল" করার অনুরোধ রইল। উদাহরণস্বরূপ, কোনও অ্যাপ্লিকেশন ডোমেন সীমানা জুড়ে লেনদেনের অবজেক্টের সিরিয়ালাইজেশন। লেনদেনের অবজেক্টটি মার্শেল-বাই-মান হয়, এর অর্থ এটি কোনও অ্যাপ্লিকেশন ডোমেন সীমানা (এমনকি একই প্রক্রিয়াতেও) পেরিয়ে যাওয়ার যে কোনও প্রচেষ্টা লেনদেনের অবজেক্টের ক্রমিকায়নের ফলাফল দেয় in প্যারামিটার হিসাবে লেনদেন গ্রহণ করে এমন কোনও রিমোট পদ্ধতিতে কল করে আপনি লেনদেনের জিনিসগুলি পাস করতে পারেন বা আপনি কোনও দূরবর্তী লেনদেনের-পরিবেশন উপাদানটি অ্যাক্সেস করার চেষ্টা করতে পারেন। এটি লেনদেনের অবজেক্টটিকে সিরিয়ালাইজ করে এবং এর ফলে বৃদ্ধি ঘটে, যখন কোনও অ্যাপ্লিকেশন ডোমেন জুড়ে কোনও লেনদেন সিরিয়ালিত হয়। এটি বিতরণ করা হচ্ছে এবং স্থানীয় লেনদেনের পরিচালক এখন পর্যাপ্ত নেই।

আমরা # 3 অভিজ্ঞতা নিচ্ছি না। # 2 ঘটছে না কারণ একবারে কেবলমাত্র একটি সংযোগ থাকে এবং এটি একক 'টেকসই সংস্থান' এরও হয়। # 1 ঘটতে পারে এমন কোনও উপায় আছে কি? কিছু SQL2005 / 8 কনফিগারেশন যার কারণে এটি একক-পর্যায়ের বিজ্ঞপ্তিগুলি সমর্থন করে না?

আপডেট 2:

পুনরায় তদন্ত, ব্যক্তিগতভাবে, প্রত্যেকের এসকিউএল সার্ভার সংস্করণ - "ডেভ 3" এর আসলে এসকিউএল ২০০8 রয়েছে, এবং "দেব 4" আসলে এসকিউএল 2003 আছে। এটি আমাকে আমার সহকর্মীদের আর কখনও বিশ্বাস করতে শেখাবে না। ;) ডেটা পরিবর্তনের কারণে, আমি নিশ্চিত যে আমরা আমাদের সমস্যাটি পেয়েছি pretty আমাদের এসকিউএল ২০০৮ বিকাশকারীরা সমস্যাটি অনুভব করছিলেন না কারণ এসকিউএল ২০০৮ এর প্রচুর পরিমাণে দুর্দান্ত রয়েছে যার মধ্যে এসকিউএল ২০০৫ নেই 5

এটি আমাকে আরও বলেছে যে আমরা এসকিউএল ২০০৫ সমর্থন করব যা আমরা যেমন করতাম তেমনি ট্রানজেকশনস্কোপও ব্যবহার করতে পারি না এবং যদি আমরা ট্রানজেকশনস্কোপ ব্যবহার করতে চাই তবে আমাদের আশেপাশে একটি একক স্কেলকনেকশন বস্তুটি পাস করা দরকার ... যা এমন পরিস্থিতিতে সমস্যাযুক্ত বলে মনে হয় যেখানে স্কেল সংযোগটি সহজেই চারপাশে পাস করা যায় না ... এটি কেবল গ্লোবাল-স্কেল সংযোগের উদাহরণের গন্ধ। পিউ!

আপডেট 3

এই প্রশ্নে এখানে স্পষ্ট করে বলা:

SQL2008:

  • একক ট্রানজেকশনস্কোপের মধ্যে একাধিক সংযোগগুলিকে মঞ্জুরি দেয় (উপরের নমুনা কোডে প্রদর্শিত হিসাবে))
  • ক্যাভেট # 1: যদি এই একাধিক স্কেলক্লিকেশনগুলি বাসা বেঁধে রাখা হয়, অর্থাৎ একই সাথে দুটি বা ততোধিক স্ক্লোল সংযোগগুলি খোলা হয় তবে ট্রানজেকশনস্কোপ তত্ক্ষণাত্ ডিটিসি-তে প্রসারিত হবে।
  • ক্যাভেট # 2: যদি একটি অতিরিক্ত 'এসকিউএল সংযোগটি অন্য একটি ' টেকসই সংস্থান ' (যেমন: একটি ভিন্ন এসকিউএল সার্ভার,) এ খোলা হয় তবে এটি তাত্ক্ষণিকভাবে ডিটিসি-তে প্রসারিত হবে

SQL2005:

  • একক ট্রানজেকশনের সময়কালের মধ্যে একাধিক সংযোগের অনুমতি দেয় না allow এটি যখন বাড়বে তখন / যদি কোনও দ্বিতীয় স্কেল সংযোগ খোলা হয়।

আপডেট 4

এমনকি আরো এই প্রশ্নের উপার্জন স্বার্থে একটি জগাখিচুড়ি এর আরও স্বচ্ছতা দোহাই জন্য দরকারী, এবং, এখানে কিভাবে আপনি একটি সঙ্গে DTC করতে ধাপে ধাপে বৃদ্ধি করার SQL2005 পেতে পারেন একক SqlConnection :

using (TransactionScope transactionScope = new TransactionScope()) {
   using (SqlConnection connection = new SqlConnection(connectionString)) {
      connection.Open();
      connection.Close();
      connection.Open(); // escalates to DTC
   }
}

এটি কেবল আমার কাছে ভাঙা মনে হচ্ছে, তবে আমি অনুমান করি যে আমি যদি বুঝতে পারি SqlConnection.Open()যে কানেকশন পুল থেকে প্রতিটি কল পেয়েছে।

"কেন এমন হতে পারে?" ঠিক আছে, আপনি যদি সেই সংযোগটি খোলার আগে তার বিপরীতে কোনও স্কেল টেবিলএডাপ্টার ব্যবহার করেন তবে স্কেল টেবিলএডাপ্টারটি সংযোগটি খুলবে এবং বন্ধ করবে, কার্যকরভাবে আপনার জন্য লেনদেন শেষ করে কারণ আপনি এখন এটি পুনরায় খুলতে পারবেন না।

সুতরাং, মূলত, এসকিউএল ২০০৫ এর সাথে ট্রানজেকশনস্কোপটি সফলভাবে ব্যবহার করার জন্য আপনার কোনও ধরণের গ্লোবাল সংযোগ অবজেক্ট থাকা দরকার যা প্রথম ট্রানজেকশনস্কোপের বিন্দু থেকে উন্মুক্ত থাকে, যতক্ষণ না এটি আর প্রয়োজন হয় না। কোনও বৈশ্বিক সংযোগের অবজেক্টের কোড-গন্ধ ছাড়াও, সংযোগটি প্রথমে খোলার এবং শেষ অবধি এটি বন্ধ করার পক্ষে যত তাড়াতাড়ি সম্ভব সংযোগটি খোলার এবং যত তাড়াতাড়ি সম্ভব এটি বন্ধ করার যুক্তির বিরোধিতা।


আপনি কি এখানে "অন্য জিনিসগুলি করুন যা পরিবেশনার সাথে জড়িত থাকতে পারে বা নাও পারে" প্রসারিত করতে পারে। অবশ্যই সেখানে যা রয়েছে তা কোডের আচরণকে ব্যাপকভাবে প্রভাবিত করে?
রিচার্ডড

2
"# 2 ঘটছে না কারণ একবারে কেবলমাত্র একটি সংযোগ থাকে" - # 2 এটি বলে না যে দ্বিতীয় সংযোগটি একই সময়ে উন্মুক্ত হওয়া দরকার, কেবল এটি একই লেনদেনে তালিকাভুক্ত হওয়া প্রয়োজন।
জো

3
কীভাবে কেবলমাত্র একটি একক স্কেল সংযোগে বিস্তৃতি ঘটতে পারে তা দেখিয়ে আপডেট 4 দিয়ে ফিরে রিপোর্ট করার জন্য আপনাকে অনেক ধন্যবাদ। কেবলমাত্র একটি একক স্কেল সংযোগ ব্যবহার করা হয়েছে তা সতর্কতার সাথে নিশ্চিত করার পরেও আমি এটির মধ্যে যাচ্ছিলাম। এটি কম্পিউটার যে আমি পাগল এবং তা নয় তা জেনে খুশি হলাম। :-)
অরান ডেনিসন

সংযোগ পুলিংয়ের ক্ষেত্রে, যদি আমাদের একাধিক সংযোগ থাকে (এবং প্রয়োজনে নেস্ট করা হয়) যদি আমরা একবারে একটি খুলতে এবং বন্ধ করে দিই আমরা যদি 1 টি সংযোগ পুলের উত্স বা সংযোগ প্রতি 1 ব্যবহার করি, আমি এটি নির্ধারণের জন্য যুক্তিযুক্ত করার চেষ্টা করছি "এনলিস্টেবল" সংযোগটি যথাযথভাবে বাদ দেওয়া উচিত কিনা (যা আমি এড়াতে চাই)
brumScouse

1
একই লেনদেনের সুযোগে নেস্টেড সংযোগগুলি বিতরণ লেনদেনের প্রচার করবে to এসকিউএল সার্ভার ২০০৮ এবং তারপরে একই লেনদেনের সুযোগের অধীনে একাধিক (বাসা বাঁধছে না) সংযোগগুলি বিতরণ করা ট্রান্সসিটনে উন্নীত করবে না।
প্রিগান্টনকোজনিরো ক্যাব্রন

উত্তর:


71

এসকিউএল সার্ভার ২০০ SQLConnectionএকরকম TransactionScopeবৃদ্ধি ছাড়াই একাধিক গুলি ব্যবহার করতে পারে , তবে সংযোগগুলি একই সময়ে না খোলা থাকে, যার ফলে একাধিক "শারীরিক" টিসিপি সংযোগ তৈরি হয় এবং সুতরাং এসকেলেশন প্রয়োজন।

আমি দেখতে পাচ্ছি আপনার বিকাশকারীদের কিছুতে এসকিউএল সার্ভার ২০০৫ রয়েছে এবং অন্যদের এসকিউএল সার্ভার ২০০৮ রয়েছে you আপনি কি নিশ্চিত যে আপনি সঠিকভাবে চিহ্নিত করেছেন কোনটি বাড়ছে এবং কোনটি নয়?

সর্বাধিক সুস্পষ্ট ব্যাখ্যাটি হ'ল এসকিউএল সার্ভার ২০০৮ এর বিকাশকারীরা হ'ল যা বাড়ছে না।


হ্যাঁ, বিশদটি সঠিক, এবং কেউ কি কোডটির দিকে তাকিয়ে আছেন? লেনদেনের সুযোগের মধ্যে দুটি সংযোগ রয়েছে, তবে কেবলমাত্র একটি সংযোগই নজরে এসেছে এবং সময়ে এক মুহুর্তে খোলা আছে। এছাড়াও, না, ডিটিসি যে মেশিনগুলি কাজ করছে তাতে চলছে না।
Yoopergeek

1
"তবে, কেবলমাত্র একটি সংযোগ উদাহরণস্বরূপ এবং এক মুহুর্তে সময়ের সাথে খোলা আছে" - কেন এটি প্রাসঙ্গিক? এসকিউএল ২০০৫ এর মাধ্যমে, যদি আপনি কোনও লেনদেনের সুযোগের মধ্যে একাধিক সংযোগ খোলেন তবে সেগুলি একই সাথে খোলা থাকবে কিনা তা আপনি বাড়িয়ে তুলবেন। আপনি এটি সম্পর্কে চিন্তা যদি কোন যৌক্তিক।
জো

আপনি এবং হাইভিচাররা এখন আমাকে দ্বিতীয়-অনুমান করছেন এবং আমি সোমবার কাজে লাগতে এবং তাদের পৃথক মেশিনগুলি আরও ঘনিষ্ঠভাবে পরীক্ষা করতে এবং এসকিউএল সার্ভার সংস্করণগুলি পূর্ববর্তী হিসাবে বর্ণিত হিসাবে নিশ্চিত করার জন্য উদগ্রীব।
Yoopergeek

19
আপনি এবং হুইচাররা ঠিক বলেছেন। আমার সারা মুখে ডিম আছে। ক্লু-স্টিক দিয়ে আমাকে আঘাত করার জন্য আপনাকে ধন্যবাদ। :) কারণ আপনি প্রথম ছিলেন, আপনি উত্তর পেয়েছেন get আমি স্পষ্টকরণের একটি পয়েন্ট যুক্ত করতে চাই, যদিও - এসকিউএল ২০০৮ একাধিক সংযোগ খোলার অনুমতি দেয় তবে একই সময়ে নয়। এখনও কোনও নির্দিষ্ট সময়ে কেবলমাত্র একটি একক সংযোগ খোলা থাকতে পারে বা লেনদেনস্কোপটি ডিটিসিতে আরও বাড়বে।
Yoopergeek

@ ইয়ুপারজিেক আমি যাচাই করতে পারি যে আপনার "একই সময়ে নয়" গুরুত্বপূর্ণ এবং সেই অনুসারে @ জো এর উত্তর সম্পাদনা করা হয়েছে। TCP সংযোগগুলির মনিটরিং যখন দেখিয়েছেন টেস্টিং যে যখন সংযোগ একই সময়ে ব্যবহার করা হয় না বয়সী TCP সংযোগ পুনঃব্যবহৃত করা হবে, এবং এইভাবে TransactionScopeএকটি একক না করতে পারেন COMMITসার্ভার প্রান্তের উপর, যা উদ্দীপন অতিরিক্ত করতে হবে।
ইউজিন বেরেসোভস্কি

58

বিষয়টি নিয়ে আমার গবেষণার ফলাফল:

এখানে চিত্র বর্ণনা লিখুন

বিতরণ লেনদেনগুলিতে অযাচিত প্রশংসন এড়ানো দেখুন

আমি এখনও ওরাকল এর ক্রমবর্ধমান আচরণটি তদন্ত করছি: একই ডিবিতে একাধিক সংযোগ বিস্তৃত লেনদেনগুলি কি ডিটিসি-তে বাড়বে?


1
আপনার গবেষণা ভাগ করে নেওয়ার জন্য ধন্যবাদ। এটা সত্যিই সাহায্য করেছে। আরও একটি দ্রুত জিজ্ঞাসা। লেনদেনস্কোপ () এবং sqlConnication.BeginTransaction () এর মধ্যে পার্থক্য কী?
বৈগ

এই বৈশিষ্ট্যটির অনুরোধ অনুসারে , ওড্যাক 12 সি-তে এখন এসকিউএল 2008 হিসাবে আচরণ করা উচিত, একই ডেটা উত্সে পরপর সংযোগ ব্যবহার করার সময় বিতরণ করার জন্য প্রচার করা উচিত নয়।
ফ্রেডেরিক

31

2005-এ সংযোগ করার সময় এই কোডটি বর্ধনের কারণ ঘটবে

এমএসডিএন - ডকুমেন্টেশন চেক করুন - http://msdn.microsoft.com/en-us/library/ms172070.aspx

এসকিউএল সার্ভার ২০০৮ এ প্রচারযোগ্য লেনদেন

.NET ফ্রেমওয়ার্ক এবং এসকিউএল সার্ভার 2005-এর সংস্করণ 2.0-এ, কোনও ট্রানজেকশনস্কোপের অভ্যন্তরে দ্বিতীয় সংযোগ খোলার মাধ্যমে স্বয়ংক্রিয়ভাবে লেনদেনটিকে একটি সম্পূর্ণ বিতরণ লেনদেনে উন্নীত করা হবে, যদিও উভয় সংযোগই অভিন্ন সংযোগের স্ট্রিং ব্যবহার করে। এই ক্ষেত্রে, একটি বিতরণ লেনদেন অপ্রয়োজনীয় ওভারহেড যোগ করে যা কার্যকারিতা হ্রাস করে।

এসকিউএল সার্ভার ২০০৮ এবং .NET ফ্রেমওয়ার্কের 3.5 সংস্করণ দিয়ে শুরু করে, পূর্ববর্তী লেনদেন বন্ধ হওয়ার পরে লেনদেনে অন্য সংযোগটি খোলা থাকলে স্থানীয় লেনদেনগুলি বিতরণ লেনদেনগুলিতে আর প্রচার করা হবে না। যদি আপনি ইতিমধ্যে সংযোগ পুলিং এবং লেনদেনের তালিকাভুক্ত হয়ে থাকেন তবে এর জন্য আপনার কোডে কোনও পরিবর্তন দরকার নেই।

আমি কেন ব্যাখ্যা করতে পারি না যে ডিভ 3: উইন্ডোজ 7 x64, এসকিউএল 20035 সাফল্য পায় এবং ডেভ 4: উইন্ডোজ 7 x64 ব্যর্থ হয়। আপনি কি নিশ্চিত যে এটি অন্যভাবে নয়?


10

আমি জানি না কেন এই উত্তরটি মুছে ফেলা হয়েছে তবে এটিতে কিছু প্রাসঙ্গিক তথ্য রয়েছে বলে মনে হয়।

উত্তর 4 '10 এ 17:42 এডুয়ার্ডো

  1. লেনদেনে স্বয়ংক্রিয় তালিকাভুক্তি এড়াতে সংযোগ স্ট্রিং এ এনলিস্ট = মিথ্যা সেট করুন।

  2. লেনদেনের সুযোগের অংশীদার হিসাবে ম্যানুয়ালি সংযোগ তালিকাভুক্ত করুন । [ মূল নিবন্ধ পুরানো]] বা এটি করুন: কীভাবে স্বয়ংক্রিয় এমএসডিটিসি প্রচার রোধ করবেন [সংরক্ষণাগার.আইস]


msdn.microsoft.com/en-us/library/ms172153%28v=VS.80%29.aspx পাওয়া যায় নি, ভিজ্যুয়াল স্টুডিও 2005 অবসরপ্রাপ্ত ডকুমেন্টেশন
কুইকিনেট

2

নেস্টেড সংযোগটি যদি সমস্যা হয় তবে আমি খুব বেশি নিশ্চিত নই। আমি এসকিউএল সার্ভারের স্থানীয় উদাহরণ কল করছি এবং এটি ডিটিসি জেনারেট করে না ??

    public void DoWork2()
    {
        using (TransactionScope ts2 = new TransactionScope())
        {
            using (SqlConnection conn1 = new SqlConnection("Data Source=Iftikhar-PC;Initial Catalog=LogDB;Integrated Security=SSPI;"))
            {
                SqlCommand cmd = new SqlCommand("Insert into Log values(newid(),'" + "Dowork2()" + "','Info',getDate())");
                cmd.Connection = conn1;
                cmd.Connection.Open();
                cmd.ExecuteNonQuery();

                using (SqlConnection conn2 = new SqlConnection("Data Source=Iftikhar-PC;Initial Catalog=LogDB;Integrated Security=SSPI;Connection Timeout=100"))
                {
                    cmd = new SqlCommand("Insert into Log values(newid(),'" + "Dowork2()" + "','Info',getDate())");
                    cmd.Connection = conn2;
                    cmd.Connection.Open();
                    cmd.ExecuteNonQuery();
                }
            }

            ts2.Complete();
        }
    }

আপনি এসকিউএল সার্ভারের কোন সংস্করণ ব্যবহার করছেন? আমি ভাবছি যে ২০০৮RR, এবং / অথবা ডেনালিতে যে কোনও পরিবর্তন প্রতিফলিত করার জন্য @ পিটার মেইনের উত্তরটি আপডেট করার দরকার আছে কিনা।
Yoopergeek

আমি এসকিউএল সার্ভার 2008 আর 2 ব্যবহার করছি।
ইফতিখার আলী

আমি ভাবছি যদি ২০০৮ আর 2 এর সাথে আরও ভাল আচরণ করা হয়? @ হাইভিচার্স উত্তরও আমাকে বিস্মিত করে তোলে যে আপনি যে ফ্রেমওয়ার্কটি সংকলন করছেন তার সংস্করণটি বৃদ্ধি রোধ করছে কিনা। অবশেষে, আমি আশ্চর্য হই যে এটি স্থানীয় আর 2 উদাহরণ হওয়ায় কোনও পার্থক্য রয়েছে। আমি চাই যে ২০০৮ আর ২ এবং এসকিউএল সার্ভার ২০১২
ইয়ুপ্পার্জিক

নিশ্চিত না নেস্টেড সংযোগটি যদি সমস্যা হয়? হ্যাঁ ... ভাল পুষ্পগুলি তবে এটিকে সরিয়ে ফেলুন !, কেন পৃথিবীতে লোকেরা জবাবদিহি করে বাসা বাঁধে যখন একেবারে প্রয়োজনীয় নয়, আমি কখনই জানতে পারি না।
পল জহরা

1

যদি আপনি ভিতরে 1 টির বেশি সংযোগ অ্যাক্সেস ব্যবহার করেন তবে ট্রানজেকশনস্কোপ সর্বদা ডিটিসি লেনদেনের দিকে এগিয়ে যায়। উপরের কোডটি ডিটিসি অক্ষমদের সাথে কাজ করার একমাত্র উপায় হ'ল যদি কোনও বিশাল সুযোগে আপনি সংযোগ পুল থেকে উভয় সময় একই সংযোগ পান।

"সমস্যাটি হল, আমাদের বিকাশকারীদের অর্ধেক মেশিনে আমরা এমএসডিটিসি অক্ষম হয়ে চালাতে পারি" " আপনি কি নিশ্চিত যে এটি অক্ষম;)


0

আপনার কানেকশনস্ট্রিংটি পুলিংকে মিথ্যাতে সেট করে না তা নিশ্চিত করুন। এটি ট্রানজেকশনস্কোপে প্রতিটি নতুন এসএলএল সংযোগের জন্য একটি নতুন সংযোগের ফলস্বরূপ এবং এটি ডিটিসি-তে বাড়িয়ে তুলবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.