HOW TO: تنفيذ معاملات الموزعة باستخدام موفر .NET باستخدام ServicedComponent في Visual Basic .NET

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية316627
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
للحصول على إصدار Microsoft Visual C# .NET من هذه المقالة، راجع 316247.

تشير هذه المقالة إلى مساحات أسماء Microsoft .NET Framework فئة مكتبة التالية:
  • System.Data.SqlClient
  • System.EnterpriseServices
  • System.Runtime.CompilerServices
  • System.Reflection

في هذه المهمة

الموجز
توضح هذه المقالة خطوة بخطوة حول كيفية تنفيذ معاملة الموزّعة باستخدام موفر .NET مع الفئة ServicedComponent. على الرغم من أن تستخدم هذه المقالة موفر .NET SqlClient إلى ملقم Microsoft SQL Server ، يمكنك أيضاً استخدام موفر المدارة ODBC أو OLE DB .NET.

back to the top

متطلبات

توضح القائمة التالية الأجهزة الموصى بها برامج البنية الأساسية للشبكة و حزم الخدمات المطلوبة:
  • ملقم متقدم Windows 2000 Microsoft Windows 2000 Professional, Windows 2000 Server
  • Microsoft Visual Studio .NET
  • Microsoft SQL Server 7.0 أو SQL Server 2000
back to the top

نظرة عامة حول

يمكن المشاركة مثيلات الفئة .NET Framework في إحدى معاملات تلقائي إذا تحضير فئة للقيام بذلك. enlists لكل مورد تقوم بالوصول إلى مثيل فئة أو كائن في المعاملة. على سبيل المثال، إذا كان يستخدم كائن ADO.NET لنشر الأموال على حساب في قاعدة بيانات "، يحدد إدارة الموارد لقاعدة ما إذا كان الكائن يتم تشغيلها في معاملة. إذا كان يجب تشغيل الكائن في معاملة ، enlists إدارة الموارد تلقائياً في قاعدة بيانات في المعاملة.

استخدم العملية التالية لإعداد فئة للمشاركة في إحدى معاملات تلقائي:
  1. تطبيق فئة TransactionAttribute الفئة لتحديد نوع المعاملة التلقائي يتطلب المكون.

    يجب أن يكون نوع المعاملة عضو التعداد TransactionOption. على سبيل المثال:
    <Transaction(TransactionOption.Required)> Public Class Bar   Inherits ServicedComponent   '. . .End Class					
  2. اشتقاق الفصل الدراسي من فئة ServicedComponent. هو ServicedComponent الفئة الأساسية كافة فئات تستخدم خدمات COM +.
  3. توقيع التجميع باستخدام اسم المميز للتأكد من أن يحتوي التجميع على زوج مفاتيح فريدة.
  4. تسجيل التجميع الذي يحتوي على الفئة مع كتالوج COM +.

    ملاحظة: إذا العميل الذي يستدعي بمثيل الفئة يديره إلى وقت تشغيل اللغة العامة يتم إجراء التسجيل لك. هذه الخطوة مطلوبة فقط إذا كان طالب غير مدار بإنشاء يستدعي مثيلات الفئة الخاص بك. استخدام أداة تثبيت خدمات .NET (Regsvcs.exe) لتسجيل التجميع يدوياً.
للحصول على مزيد من المعلومات حول كيفية تسجيل تجميع باستخدام اسم المميز راجع الموضوع التالي في دليل المطور Microsoft .NET Framework: لمزيد من المعلومات حول هذه العملية راجع الموضوع التالي في دليل المطور .NET Framework: back to the top

إنشاء المشروع

  1. اتبع الخطوات التالية لإنشاء مشروع "تطبيق وحدة تحكم" جديد في Visual Basic .NET:
    1. بدء تشغيل Visual Studio .NET.
    2. من القائمة ملف، أشر إلى جديد ثم انقر فوق المشروع.
    3. في مربع الحوار مشروع جديد ، انقر فوق مشاريع Visual Basic ضمن أنواع Project انقر فوق تطبيق وحدة التحكم ضمن قوالب ثم ثم انقر فوق موافق.
    4. في "مستكشف الحلول" إعادة تسمية الملف Module1.vb كـ DistributedTransaction.vb.
  2. حذف كافة التعليمات البرمجية من ملف DistributedTransaction.vb.
  3. من القائمة المشروع انقر فوق إضافة مرجع ثم قم بإضافة المراجع التالية:
    • System.EnterpriseServices
    • System.Data.dll

  4. قم بإضافة التعليمات البرمجية التالية إلى ملف DistributedTransaction.vb:
    Imports SystemImports System.Data.SqlClientImports System.EnterpriseServicesImports System.Runtime.CompilerServicesImports System.Reflection<Assembly: ApplicationName("DistributedTransaction")> <Assembly: AssemblyKeyFileAttribute("..\..\DistributedTransaction.snk")> Namespace DistributedTransaction    '<summary>    'Summary description for Class1.    '</summary>    Module Module1        '<summary>        'The main entry point for the application.        '</summary>        <STAThread()> Sub Main()            Try                Dim myDistributedTran As New DistributedTran()                myDistributedTran.TestDistributedTransaction()            Catch e As System.Data.SqlClient.SqlException                System.Console.WriteLine("Transaction Aborted: Error returned: " + e.Message)            End Try        End Sub    End Module    '<summary>    'Summary description for TestApp.    '</summary>    <Transaction(TransactionOption.Required)> Public Class DistributedTran        Inherits ServicedComponent        Public Sub DistributedTran()        End Sub        <AutoComplete()> Public Function TestDistributedTransaction() As String            'The following Insert statement goes to the first server.            'This Insert statement does not produce any errors.             Dim insertCmdSql As String = "Insert Into TestTransaction (Col1, Col2) Values (1,'Sql Test')"            'The following Delete statement goes to the second server.            'Because the table does not exist, this code throws an exception.             Dim exceptionCausingCmdSQL As String = "Delete from NonExistentTable"            'The following connection strings create instances of two SqlConnection objects            'to connect to two different SQL Server servers in your environment.            'Modify the connection strings as necessary for your environment.            Dim SqlConn1 As New SqlConnection("Server=Name_of_Server1;uid=User_Id;database=DatabaseName;pwd=Password")            Dim SqlConn2 As New SqlConnection("Server=Name_of_Server2;uid=User_Id;database=DatabaseName;pwd=Password")            Try                Dim insertCmd As New SqlCommand(insertCmdSql, SqlConn1)                Dim exceptionCausingCmd As New SqlCommand(exceptionCausingCmdSQL, SqlConn2)                'This command should run properly.                insertCmd.Connection.Open()                insertCmd.ExecuteNonQuery()                'This command results in an exception, which automatically rolls back                'the first command (the insertCmd command).                exceptionCausingCmd.Connection.Open()                Dim cmdResult As Integer = exceptionCausingCmd.ExecuteNonQuery()                SqlConn1.Close()                SqlConn2.Close()                Console.WriteLine("Hello")            Catch ex As System.Data.SqlClient.SqlException                'After you catch the exception in this function, throw it.                'The service component receives this exception and aborts the                'transaction. The service component then throws the same exception,                'and the calling function receives the error message.                Console.WriteLine(ex.Message)                Throw (ex)            Finally                'Close the connection.                If SqlConn1.State.ToString() = "Open" Then                    SqlConn1.Close()                End If                If SqlConn2.State.ToString() = "Open" Then                    SqlConn2.Close()                End If            End Try            Return "Success"        End Function    End ClassEnd Namespace 					
  5. من القائمة ملف، انقر فوق حفظ الكل.
  6. انقر فوق ابدأ ، وأشر إلى البرامج ، وأشر إلى Microsoft Visual Studio .NET ، أشر إلى أدوات .NET Visual Studio ثم انقر فوق موجه الأوامر .NET Visual Studio.
  7. افتح المجلد الذي يحتوي على المشروع ثم قم بتشغيل الأمر التالي لإعادة تسجيل التجميع مع اسم المميز:
    كيلو sn DistributedTransaction.snk
  8. إنشاء التطبيق الخاص بك.
  9. إنشاء الجدول التالي في أول ملقم SQL Server:
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TestTransaction]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)drop table [dbo].[TestTransaction]GOCREATE TABLE [dbo].[TestTransaction] (	[Col1] [int] NULL ,	[Col2] [varchar] (100) NULL ) ON [PRIMARY]GO 					
  10. تشغيل التطبيق الخاص بك. لاحظ ظهور رسالة الخطأ التالية (وهو السلوك المتوقع):
    إرجاع Aborted المعاملة: الخطأ: اسم الكائن غير صالح 'NonExistentTable'.
  11. فتح محلل استعلام SQL Server بإضافة التعليمة البرمجية التالية واضغط F5 لتشغيل الاستعلام:
    USE NORTHWIND;SELECT * FROM TestTransaction WHERE Col1=1 AND Col2='Sql Test'						
    لاحظ أن الاستعلام لا يرجع أية صفوف لأنه تم إيقاف المعاملة قبل اكتمالها.
  12. حدد موقع التعليمة البرمجية التالية في مشروع Visual Basic:
    Dim exceptionCausingCmdSQL As String = "Delete from NonExistentTable"						
    واستبدالها عبارة SQL مع استعلام صالح لا يؤدي إلى إحباط المعاملة. على سبيل المثال:
    Dim exceptionCausingCmdSQL As String = "Select @@Identity from customers"					
  13. اضغط F5 ترجمة ثم تشغيل التطبيق مرة أخرى.
  14. قم بتشغيل الأمر من الخطوة 11 في "محلل الاستعلام" مرة أخرى. لاحظ أن الاستعلام إرجاع صف بسبب المعاملة قادراً على إكمال بنجاح.
ملاحظات:
  • لم هذا المثال تنفيذ معالجة الخطأ.
  • يجب أن يتم تشغيل SQL Server و Microsoft منسق المعاملات الموزعة (MS DTC) على كافة العملاء والملقمات.
back to the top
مراجع
للحصول على معلومات إضافية، انقر فوق رقم المقالة أدناه لعرضها في "قاعدة المعارف لـ Microsoft:
312902HOW TO: إنشاء مكون .NET Serviced في Visual Basic .NET
back to the top

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 316627 - آخر مراجعة: 02/28/2014 00:35:39 - المراجعة: 2.1

Microsoft ADO.NET (included with the .NET Framework), Microsoft ADO.NET 1.1, Microsoft .NET Framework Service Pack 2, Microsoft Enterprise Services (included with the .NET Framework 1.1), Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual Basic .NET 2003 Standard Edition

  • kbnosurvey kbarchive kbmt kbcompiler kbhowtomaster kbsqlclient kbsystemdata KB316627 KbMtar
تعليقات