Steve's profileSteve's spaceBlogListsNetwork Tools Help

Steve's space

September 24

Custom Provider-Based Services

 
MyBaseProvider.cs
 
using System.Configuration.Provider;
 
public abstract class MyBaseProvider : ProviderBase
{
     public abstract string MyProperty { get; set; }
 
     public abstract void MyMethod();
}
 
MyProvider.cs
 
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
 
public class MyProvider : MyBaseProvider
{
    protected override string MyProperty { get; set; }
 
    public override void Initialize(string name, NameValueCollection nameValueCollection)
    {
        if (nameValueCollection == null)
        {
            throw new ArgumentNullException("nameValueCollection");
        }
 
        if (string.IsNullOrEmpty(name))
        {
            name = "MyProvider";
        }
 
        if (string.IsNullOrEmpty(nameValueCollection["description"]))
        {
            nameValueCollection.Remove("description");
            nameValueCollection.Add("description", "My Provider");
        }
 
        base.Initialize(name, nameValueCollection);
    }
 
    protected override void MyMethod()
    {
        throw new NotImplementedException();
    }
}

Web.config / app.config
 
<configuration>
     <configSections>
          <section allowDefinition="MachineToApplication" name="myBaseProvider" restartOnExternalChanges="true" type="MyBaseProviderConfigurationSection, MyProvider, Version=1.0.0.0, Culture=Neutral"/>
     </configSections>
     <comparisonProvider defaultProvider="MyProvider">
          <providers>
               <clear/>
               <add name="MyProvider" type="MyProvider, MaxRepSSRSAutomatedTesting, Version=1.0.0.0, Culture=Neutral"/>
          </providers>
     </comparisonProvider>
</configuration>
 
MyProviderCollection.cs
 
using System;
using System.Configuration.Provider;
 
public class MyProviderCollection : ProviderCollection
{
     public new MyBaseProvider this[string name]
     {
          get { return (MyBaseProvider)base[name]; }
     }
 
     public override void Add(ProviderBase provider)
     {
          if (provider == null)
          {
               throw new ArgumentNullException("provider");
          }
 
          if (!(provider is MyBaseProvider))
          {
               throw new ArgumentException("Invalid provider type", "provider");
          }
 
          base.Add(provider);
      }
}
 
MyBaseProviderConfigurationSection.cs
 
using System.Configuration;
 
public class MyBaseProviderConfigurationSection : ConfigurationSection
{
    [ConfigurationProperty("providers")]
    public ProviderSettingsCollection Providers
    {
        get { return (ProviderSettingsCollection)base["providers"]; }
    }
 
    [StringValidator(MinLength = 1)]
    [ConfigurationProperty("defaultProvider", DefaultValue="MyProvider")]
    public string DefaultProvider
    {
        get { return (string)base["defaultProvider"]; }
        set { base["defaultProvider"] = value; }
    }
}
 
MyManager.cs
 
using System;
using System.Configuration;
using System.Configuration.Provider;
using System.Web.Configuration;
 
public class MyManager
{
    private static MyBaseProvider _MyBaseProvider = null;
    private static MyBaseProviderCollection _MyBaseProviderCollection = null;
    private static object _lock = new object();
 
    public MyBaseProvider Provider
    {
        get { return _MyBaseProvider; }
    }
 
    public MyBaseProviderCollection ProviderCollection
    {
        get { return _MyBaseProviderCollection; }
    }
 
    public static void MyMethod()
    {
        LoadProviders();
 
        _MyBaseProvider.MyMethod();
    }
 
    private static void LoadProviders()
    {
        if (_MyBaseProvider == null)
        {
            lock (_lock)
            {
                if (_MyBaseProvider == null)
                {
                    MyBaseProviderConfigurationSection myBaseProviderConfigurationSection = (MyBaseProviderConfigurationSection)ConfigurationManager.GetSection("myBaseProvider");
 
                    _MyBaseProviderCollection = new ComparisonProviderCollection();
 
                    ProvidersHelper.InstantiateProviders(myBaseProviderConfigurationSection.Providers, _MyBaseProviderCollection, typeof(MyBaseProvider));
 
                    _MyBaseProvider = _MyBaseProviderCollection[myBaseProviderConfigurationSection.DefaultProvider];
 
                    if (_MyBaseProvider == null)
                    {
                        throw new ProviderException ("Unable to load default provider MyBaseProvider");
                    }
                }
            }
        }
    }
}
March 28

How to use System.Data.SqlClient.SqlDependency with a Windows Service

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Security;
using System.Security.Permissions;
using System.ServiceProcess;
using System.Data.SqlClient;
using System.Text;
 
namespace SqlDependencyExample
{
public partial class SqlDependencyExample : ServiceBase
{
private DataTable dataTable;
private SqlConnection sqlConnection;
private SqlCommand sqlCommand;
private SqlDependency sqlDependency;
 
public WindowsService()
{
InitializeComponent();
 
dataTable = new DataTable();
sqlConnection = new SqlConnection(Settings.Default.ConnectionString);
sqlCommand = new SqlCommand("Select [Temp] From [dbo].[Temp]", sqlConnection);
}
 
protected override void OnStart(string[] args)
{
#if DEBUG
System.Diagnostics.Debugger.Launch();
#endif
 
base.OnStart(args);
 
try
{
SqlClientPermission sqlClientPermission = new SqlClientPermission(PermissionState.Unrestricted);
 
sqlClientPermission.Demand();
 
this.CreateSqlDependencyAndFillDataTable();
 
EventLog.WriteEntry(String.Format("OnStart: {0}", System.DateTime.Now), System.Diagnostics.EventLogEntryType.Information);
}
catch(SecurityException securityException)
{
EventLog.WriteEntry(String.Format("{0}", securityException.Message), System.Diagnostics.EventLogEntryType.Error);
}
}
 
protected override void OnPause()
{
base.OnPause();
 
sqlDependency.OnChange -= sqlDependency_OnChange;
 
SqlDependency.Stop(Settings.Default.ConnectionString);
 
EventLog.WriteEntry(String.Format("OnPause: {0}", System.DateTime.Now), System.Diagnostics.EventLogEntryType.Information);
}
 
protected override void OnContinue()
{
base.OnContinue();
 
this.CreateSqlDependencyAndFillDataTable();
 
EventLog.WriteEntry(String.Format("OnContinue: {0}", System.DateTime.Now), System.Diagnostics.EventLogEntryType.Information);
}
 
protected override void OnStop()
{
base.OnStop();
 
sqlDependency.OnChange -= sqlDependency_OnChange;
 
SqlDependency.Stop(Settings.Default.ConnectionString);
 
this.sqlConnection.Close();
 
EventLog.WriteEntry(String.Format("OnStop: {0}", System.DateTime.Now), System.Diagnostics.EventLogEntryType.Information);
}
 
protected void sqlDependency_OnChange(object sender, SqlNotificationEventArgs e)
{
SqlDependency sqlDependency = (SqlDependency)sender;
 
sqlDependency.OnChange -= sqlDependency_OnChange;
 
this.CreateSqlDependencyAndFillDataTable();
 
EventLog.WriteEntry(String.Format("OnChange: {0}", System.DateTime.Now), System.Diagnostics.EventLogEntryType.Information);
}
 
protected void CreateSqlDependencyAndFillDataTable()
{
SqlDependency.Start(Settings.Default.ConnectionString);
 
sqlCommand.Notification = null;
sqlDependency = new SqlDependency(sqlCommand);
sqlDependency.OnChange += new OnChangeEventHandler(sqlDependency_OnChange);
 
dataTable.Clear();
 
using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand))
{
sqlDataAdapter.Fill(dataTable);
}
 
EventLog.WriteEntry(String.Format("CreateSqlDependencyAndFillDataTable, dataTable.Rows.Count: {0}", dataTable.Rows.Count), System.Diagnostics.EventLogEntryType.Information);
}
}
}
 
This person's network is empty (or maybe they're keeping it private).

Steve van Bodegraven

No list items have been added yet.