Article ID: 306296
Article Last Modified on 9/18/2003
APPLIES TO
- Microsoft Enterprise Services (included with the .NET Framework) 1.0
- Microsoft Visual C# .NET 2002 Standard Edition
This article was previously published under Q306296
For a Microsoft Visual Basic .NET version of this article, see 312902.
For a Microsoft Visual C++ .NET version of this article, see 309108.
This article refers to the following Microsoft .NET Framework Class Library namespace:
- System.EnterpriseServices
IN THIS TASK
- Important Notes
- Create the Serviced .NET Component
- Give Your Assembly a Strong Name
- Add Your Serviced Component to COM+
- Test Your Component
SUMMARY
This step-by-step article demonstrates how to create a serviced .NET component that uses transactions. This article also demonstrates how to create a client that tests your serviced component. Microsoft Enterprise Services provides Microsoft COM+ services to .NET components.
back to the top
Important Notes
- Serviced components require strong names.
- Serviced components should be registered in the Global Assembly Cache (GAC) because they are system-level resources. Server applications require installation in the GAC, but library applications do not (although it is recommended).
- You can register serviced components with COM+ either automatically through lazy registration or manually through the Regsvcs.exe utility. Regsvcs.exe is located in the following folder:
\WINNT\Microsoft.NET\Framework\<Framework Version>
- This sample assumes that Microsoft SQL Server has been installed on the local computer.
- This sample is intended only for illustration purposes. Strictly speaking, this sample's select query is a good candidate to run outside of a COM+ transaction because COM+ uses the highest isolation level for the transaction. To improve database throughput, it is good programming practice to consider read queries for lower transaction levels.
Create the Serviced .NET Component
- Create a new Visual C# Class Library project named ServicedCOM.
- Rename your default class and the filename from Class1.cs to SimpleTrans.cs. to do this, follow these steps:
- In the Class View window, right-click Class1, and then click Properties.
- In Properties, change the Name property to SimpleTrans.
- Add a reference to the System.EnterpriseServices namespace.
Add the following statement, as the top line, to both SimpleTrans.cs and AssemblyInfo.cs:
using System.EnterpriseServices;
At the top of SimpleTrans.cs add the following statement:
using System.Data.SqlClient;
- Inherit your class from ServicedComponent (fully qualified name: System.EnterpriseServices.ServicedComponent).
Add the following code just before the *public class* declaration:
[Transaction(TransactionOption.RequiresNew)]
Add the following recommended attributes to AssemblyInfo.cs:
[assembly: ApplicationActivation(ActivationOption.Library)] [assembly: ApplicationName("SimpleTrans")]
- The ActivationOption attribute indicates whether the component will be activated within the caller's process. You can set Activation.Option to Library or to Server.
- The ApplicationName attribute is the name that appears for the COM+ application in the COM+ Catalog and the Component Services Administration console.
Add the following optional attribute to SimpleTrans.cs, just after the using statements:
[assembly: Description("Simple Transactional application to show Enterprise Services")]
This attribute provides a description for the COM+ application in the COM+ Catalog and Component Services Administration console.
Add the following method to SimpleTrans.cs:
// Demos Explicit SetComplete/SetAbort public string DoTrans() { SqlConnection connection; SqlCommand command; SqlDataReader reader; string name; string query; try { query = "SELECT au_lname, au_fname FROM authors"; connection = new SqlConnection("data source = localhost; initial catalog = pubs; UID=sa;PWD="); command = new SqlCommand(query, connection); connection.Open(); reader = command.ExecuteReader(); reader.Read(); name = reader.GetString(0) + ", " + reader.GetString(1); } catch(Exception exc) { ContextUtil.SetAbort(); throw exc; } return name; } // Demo implicit SetComplete/SetAbort [AutoComplete] public void DoTxAuto() { // Do stuff }
- Modify the SqlConnection string as appropriate for your environment.
Give Your Assembly a Strong Name
- Click Start, point to Programs, point to Microsoft Visual Studio .NET, point to Visual Studio .NET Tools, and then click Visual Studio .NET Command Prompt.
- At the command prompt, type sn.exe -k ServicedCOM.snk to give your assembly a strong name.
For information about signing assemblies with strong names, refer to the .NET Framework Software Development Kit (SDK) documentation. - Copy ServicedCOM.snk to the project folder.
In AssemblyInfo.cs, replace the AssemblykeyFile code with the following code:
[assembly: AssemblyKeyFile("..\\..\\ServicedCOM.snk")]
Add Your Serviced Component to COM+
You can allow the component to register dynamically when the first instance is created, or you can manually register the component with Regsvcs.exe. To use Regsvcs.exe, follow these steps:
- Click Start, point to Programs, point to Microsoft Visual Studio .NET, point to Visual Studio .NET Tools, and then click Visual Studio .NET Command Prompt.
- At the command prompt, type regsvcs servicedcom.dll. This creates a COM+ library application with the same name as your class name. Ignore the warning message.
Test Your Component
- In Notepad, open a text file.
Paste the following code in the file:
set o =createobject("ServicedCOM.SimpleTrans") MsgBox o.DoTrans()
- From the File menu, click Save.
- In the Save As dialog box, in the File name text box, type Test.vbs. In the Save as type list, click All Files, and then click Save.
- Double-click the file to run the sample.
Keywords: kbhowtomaster KB306296