Accessing remote SQL server by remoting(TCP)

subcom 0 Tallied Votes 262 Views Share

Introduction

.NET Remoting provides a rich and extensible framework for objects living in different AppDomains, in different processes, and in different machines to communicate with each other seamlessly. .NET Remoting offers a powerful yet simple programming model and runtime support for making these interactions transparent. In this article we will take a look at the different building blocks of the Remoting architecture, as well as explore some of the common scenarios in which .NET Remoting can be leveraged.

In this sample describes how to build a distribution application which accesses MS SqlServer2000 on remoting service.

Server

using System;
using System.Data; 
using System.Data.SqlClient;

namespace RemotingSamples 
{
        public class Hello : System.MarshalByRefObject 
        {
                public Hello() 
                {
                        Console.WriteLine("Hello actived");
                }

                ~Hello()
                {
            Console.WriteLine("Hello destroyed");
                }

                public DataSet GetData() 
                { 
                        string conn = "Initial Catalog=Northwind;Data Source=localhost;Integrated Security=SSPI"; 
                    //new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["strconn"]); 
                        SqlDataAdapter da=new SqlDataAdapter("select * from Products",conn); 
                        DataSet ds=new DataSet(); 
                        da.Fill(ds); 
                        return ds; 
                } 
        }
}

Client

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.Data;

namespace RemotingSamples 
{
        public class Client
        {
                [STAThread]
                public static void Main(string [] args)
                {
                        //TcpChannel chan = new TcpChannel();
                        ChannelServices.RegisterChannel(new TcpClientChannel());
                        Hello obj = (Hello)Activator.GetObject(typeof(Hello),"tcp://localhost:8085/Hi");
                        DataTable dt=obj.GetData().Tables[0]; 
                        foreach(DataRow dr in dt.Rows) 
                        { 
                                Console.WriteLine(dr["ProductID"]+" "+dr["ProductName"]); 
                        } 
                        //if (obj == null) System.Console.WriteLine("Could not find server");
                        //else Console.WriteLine(obj.Greeting("kk"));
                        //else Console.WriteLine(obj.HelloMethod("John"));

                } 
        }
}
interface:

using System;

namespace RemotingSamples {
    public interface IHello {
        String HelloMethod(String name);
    }

    public class HelloServer : MarshalByRefObject, IHello {
        public HelloServer() {
            Console.WriteLine("HelloServer actived");
        }

        public String HelloMethod(String name) {
            Console.WriteLine("Hello.HelloMethod : {0}", name);
            return "hello," + name;
        }
    }
}