يدعم دعم المعاملات لخدمات ويب XML الدعم في وقت تشغيل اللغة العامة، والذي يستند إلى نفس نموذج المعاملات الموزع الموجود في Microsoft Transaction Server (MTS) وخدمات COM+. يعتمد هذا النموذج على التحديد الصريح لما إذا كان الكائن يشارك في معاملة أم لا، بدلاً من كتابة تعليمات برمجية محددة للتعامل مع التفويض وعمليات الاسترجاعات الخاصة بالمعاملة. بالنسبة لخدمة ويب XML التي تم إنشاؤها باستخدام ASP.NET، يمكنك تعريف سلوك المعاملة لخدمة ويب XML عن طريق تعيين سمة TransactionOption للسمة WebMethod التي تنطبق على أسلوب خدمة ويب XML. إذا تم طرح استثناء عند تنفيذ طريقة خدمة ويب XML، فستنتهي المعاملة تلقائيًا، وعلى العكس من ذلك، إذا لم يحدث أي استثناء، فسيتم تفويض المعاملة تلقائيًا.
تحدد سمة TransactionOption للسمة WebMethod كيفية مشاركة أسلوب خدمة ويب XML في المعاملة. على الرغم من أن مستوى الإعلان هذا يمثل منطق المعاملة، إلا أنه يعد خطوة بعيدًا عن المعاملة الفعلية. تحدث المعاملة الفعلية عندما يصل كائن معاملة إلى مصدر بيانات (مثل قاعدة بيانات أو قائمة انتظار الرسائل). تتدفق المعاملات المرتبطة بهذا الكائن تلقائيًا إلى مدير الموارد المناسب. يبحث موفر بيانات .NET Framework مثل موفر بيانات .NET Framework (لـ SQL Server أو OLE DB) عن المعاملات في سياق كائن ويقوم بفهرستها من خلال منسق المعاملات الموزعة (DTC، منسق المعاملات الموزعة). يتم إنشاء كافة المعاملات تلقائيا.
يمكن لأساليب خدمة ويب XML المشاركة فقط في المعاملة التي تمثل جذر المعاملة الجديدة. باعتبارها جذر المعاملة الجديدة، فإن كافة التفاعلات مع مديري الموارد (مثل الخوادم التي تقوم بتشغيل Microsoft SQL Server وMicrosoft خدمة وضع الرسائل في قائمة انتظار وMicrosoft Host Integration Server) تحافظ على خصائص ACID المطلوبة لتشغيل التطبيقات الموزعة القوية. تشارك أساليب خدمة ويب XML التي تستدعي أساليب خدمة ويب XML الأخرى في معاملات مختلفة لأن المعاملات لا تتدفق عبر أساليب خدمة ويب XML.
قم بتعريف خدمة ويب XMLباستخدام المعاملات من أساليب خدمة ويب XML
.
[ج #]
<%@ WebService Language="C#" Class="Orders" %>
[فيجوال بيسك]
<%@ WebService Language="VB" Class="Orders" %>
قم بإضافة تعليمات التجميع إلى System.EnterpriseServices.
<%@ اسم التجميع = "System.EnterpriseServices,Version=1.0.3300.0,Culture=محايد,PublicKeyToken=b03f5f7f11d50a3a" %>
أضف مراجع إلى مساحات اسم المجال System.Web.Services وSystem.EnterpriseServices.
[ج #]
باستخدام System.Web.Services؛
باستخدام System.EnterpriseServices؛
[فيجوال بيسك]
واردات System.Web.Services
تقوم عمليات الاستيراد System.EnterpriseServices
بتعريف أسلوب خدمة ويب XML وتعيين خاصية TransactionOption للسمة WebMethod إلى TransactionOption.RequiresNew.
[ج #]
[WebMethod(TransactionOption=TransactionOption.RequiresNew)]
الباحث العام حذف المؤلف (سلسلة الاسم الأخير)
[فيجوال بيسك]
<WebMethod(TransactionOption:=TransactionOption.RequiresNew)> _
الوظيفة العامة حذف الكاتب (اسم العائلة كسلسلة) كعدد صحيح
يوضح مثال التعليمة البرمجية التالي خدمة ويب XML باستخدام أسلوب خدمة ويب XML واحد، يستدعي حذف قاعدة البيانات. تقوم طريقة خدمة ويب XML هذه بتنفيذ عملية قاعدة بيانات ضمن نطاق المعاملة. إذا طرحت عملية قاعدة البيانات استثناءً، فسيتم إيقاف المعاملة تلقائيًا؛ وإلا فسيتم تنفيذ المعاملة تلقائيًا.
[ج #]
<%@ WebService Language="C#" Class="Orders" %>
<%@ اسم التجميع = "System.EnterpriseServices,Version=1.0.3300.0,Culture=محايد,PublicKeyToken=b03f5f7f11d50a3a" %>
باستخدام النظام؛
باستخدام System.Data؛
باستخدام System.Data.SqlClient؛
باستخدام System.Web.Services؛
باستخدام System.EnterpriseServices
أوامر الطبقة العامة: WebService
{
[WebMethod(TransactionOption=TransactionOption.RequiresNew)]
الباحث العام حذف المؤلف (سلسلة الاسم الأخير)
{
StringdeleteCmd = "احذف من المؤلفين حيث au_lname='" +
الاسم الأخير + "'" ;
String ExceptionCausingCmdSQL = "احذف من NonExistingTable حيث
au_lname='" + lastName + "'" ;
SqlConnection sqlConn = new SqlConnection(
"معلومات الأمان المستمرة=False;Integrated Security=SSPI;database=pubs;server=myserver")
;
SqlCommand ExceptionCausingCmd = new
SqlCommand(exceptionCausingCmdSQL,sqlConn);
// يجب تنفيذ هذا الأمر بشكل صحيح.
deleteCmd.Connection.Open();
deleteCmd.ExecuteNonQuery();
// ينتج عن هذا الأمر استثناء، لذا فإن الأمر الأول هو
// تم التراجع تلقائيًا عن طريقة خدمة ويب XML
// المشاركة في معاملة، وحدث استثناء، ASP.NET
// يجهض المعاملة تلقائيًا
// تم التراجع عن تنفيذه بشكل صحيح
int cmdResult = ExceptionCausingCmd.ExecuteNonQuery(
)
;
}
}
[فيجوال بيسك]
<%@ WebService Language="VB" Class="Orders" %>
<%@ اسم التجميع = "System.EnterpriseServices" %>
نظام الاستيراد
ImportsSystem.Data
واردات System.Data.SqlClient
واردات System.Web.Services
واردات System.Web.Util
أوامر الفئة العامة
System.EnterpriseServices
<WebMethod(TransactionOption:=TransactionOption.RequiresNew)> _
الوظيفة العامة حذف المؤلف (اسم العائلة كسلسلة) كعدد صحيح
خافت حذف CmdSQL كسلسلة = "حذف من المؤلفين حيث au_lname='" + _
الاسم الأخير + "'"
استثناء خافتCausingCmdSQL كسلسلة = "حذف من" + _
"NonExistingTable WHERE au_lname='" + lastName + "'"
Dim sqlConn As SqlConnection = New SqlConnection( _
"معلومات الأمان المستمرة=خطأ؛الأمان المتكامل=SSPI؛قاعدة البيانات=الناشرين؛الخادم=myserver"
)
استثناء خافتCausingCmd As SqlCommand = جديد _
SqlCommand(exceptionCausingCmdSQL,sqlConn)
'يجب تنفيذ هذا الأمر بشكل صحيح.
حذفCmd.Connection.Open()
deleteCmd.ExecuteNonQuery()
' ينتج عن هذا الأمر استثناء، لذا فإن الأمر الأول هو
' تم التراجع تلقائيًا عن طريقة خدمة ويب XML
' المشاركة في معاملة، ويحدث استثناء، ASP.NET
"يقوم الحذف تلقائيًا بإحباط المعاملة
تم إرجاع
Dim cmdResult As Integer = ExceptionCausingCmd.ExecuteNonQuery()
الذي تم تنفيذه بشكل صحيح.
sqlConn.Close()
يُرجع cmdResult
وظيفة النهاية
نهاية الفصل