1. Trang chủ
  2. » Công Nghệ Thông Tin

Activator trong .net remoting

52 188 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 52
Dung lượng 2,24 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Ứng dụng sẽ cho phép chọn trên giao diện các chức năng sau:1) – Gửi 1 thông báo nào đó tới toàn bộ client2) – Gửi 1 thông báo nào đó tới 1 client nào đó3) – Tắt toàn bộ chương trình Client4) – Shutdown toàn bộ máy đang sử dụng chương trình ClientỞ đây Tôi sẽ kết hợp Timer để thiết lập trong khoảng thời gian bao nhiêu milisecond thì sẽ gửi nhận thông tin….

Trang 1

Activator trong net remoting

Ứng dụng sẽ cho phép chọn trên giao diện các chức năng sau:

1) – Gửi 1 thông báo nào đó tới toàn bộ client

2) – Gửi 1 thông báo nào đó tới 1 client nào đó

3) – Tắt toàn bộ chương trình Client

4) – Shutdown toàn bộ máy đang sử dụng chương trình Client

Ở đây Tôi sẽ kết hợp Timer để thiết lập trong khoảng thời gian bao nhiêu milisecondthì sẽ gửi/ nhận thông tin…

Giao diện của Server sẽ như sau:

Giao diện của Client:

1

Trang 2

Giao diện Send Message (khi Server chọn chức năng gửi thông báo thì các client sẽ

tự động pop up giao diện này Chỉ khi nào Active nó bằng cách bấm vào nút ở giữa màn hình thì nó không hiển thị):

Khi Server thực hiện các thao tác : (như hình minh họa) Thì client sẽ nhận được những thông tin tương Ứng

Ở đây còn 2 thao tác: Shutdown 1 máy client, Gửi thông điệp tới 1 client Tôi không làm, Tôi dành cho các bạn làm Chú ý cách làm tương tự như Đóng cửa sổ từng client Rất dễ, bạn chỉ cần chuyển đổi ProcessType (enum trong chương trình cho Tôi tạo) là bạn sẽ thực hiện được 2 yêu cầu này một cách dễ dàng

Các bạn chú ý là chức năng Tắt client cũng như Shutdown từng máy client bạn nên hiển thị ListView cho phép chọn từng máy, hoặc chọn hết Ở đây Tôi đã làm sẵn giao diện tắt từng client bạn ứng dụng làm lại cho Shutdown

Cấu trúc Solution:

Trang 3

Coding tầng ProxyObject – bạn để ý enum ProcessType, ứng với mỗi chức năng bạnchỉ cần đổi nó là ok:

Trang 4

[Serializable]

public class ClientInfor

{

public string ClientName { get; set; }

public ProcessType Type { get; set; }

}

[Serializable]

public class MyProcess:MarshalByRefObject

{

private ArrayList listClient = new ArrayList();

public void addClient(ClientInfor client)

Trang 5

ClientInfor c = listClient[i] as ClientInfor;

if (c.ClientName.Equals(name, StringComparison.CurrentCultureIgnoreCase)){

Trang 6

TcpChannel tcpChannel = null;

MyProcess myProcess = null;

private void btnStart_Click(object sender, EventArgs e)

Form2 frm2 = new Form2();

frm2.myProcess = myProcess;

Trang 7

private void btnSendMessageToAllClient_Click(object sender, EventArgs e)

public MyProcess myProcess;

private void Form2_Load(object sender, EventArgs e)

{

listView1.Items.Clear();

Trang 8

foreach (ClientInfor client in myProcess.ListClient)

Trang 9

}

MyProcess myProcess = null;

Timer myTimer = null;

myName = getComputerName();

myProcess = new MyProcess();

ClientInfor infor = new ClientInfor()

Trang 10

myProcess.removeAllClient();

Trang 12

Source

Code : http://www.mediafire.com/download/7vmxf22qyzeqwz6/ControlClientComputer.rar

Posted in: Net Remoting C#

Ví dụ mẫu Net Remoting & Windows Services

By Trần Duy Thanh on March 12, 2012 | 2 Comments

2 Votes

VÍ DỤ NÀY TÔI TÁCH LÀM 2 PHẦN (Sử dụng Visual Studio 2010, coding bằng C#)

Trang 13

Phần 1: Tôi hướng dẫn các bạn cách thực hiện Net Remoting Sẽ có 3 Project trong solution này Tầng ProxyObject, tầng Server và tầng Client Trong đó tầng Server sẽ

có giao diện để Start Stop Server, Tầng Client có giao diện để kết nối tới Server để gọi một số phương thức trong tầng ProxyObject

Phần 2: Tiếp tục với ví dụ trong phần 1, nhưng trong trường hợp này Tôi sẽ không tạo giao diện cho tầng Server, mà Tôi đưa tầng Server về chạy theo dạng Windows Services

Tôi nghĩ rằng Topic này sẽ rất hữu ích cho những bạn muốn quan tâm tới các

chương trình Net Remoting, Windows Services, cách sử dụng component Eventlog, cũng như cách làm deployed chương trình Vì Tôi hướng dẫn chi tiết nên có thể bạn cảm thấy làm nó dài và phức tạp, nhưng thực ra nếu khi các bạn làm hiểu rành rồi thìchỉ cần 5-10 phút là xong tầng Service và Setup Chúc các bạn thành công

Link download hướng

dẫn: http://www.mediafire.com/download/cqimq779ia65deg/NetRemotingAndWindowsServices.docx

Link download source

code:http://www.mediafire.com/download/z0lpphb6np3o3b6/NetRemotingAndWindowsServices.rar

——————————————————————————————————

—————————–

Dưới đây là các bước chi tiết cho phần 1:

Bước 1: Tạo tên Solution

Bước 2: Tiến hành tạo 3 Project cho Solution: Tầng ProxyObject, tầng Server và Client

Bước 3: Tiến hành viết coding cho tầng ProxyObject

Bước 4: Tiến hành viết coding cho tầng Server

Bước 5: Tiến hành viết code cho Tầng Client

Trang 14

Bước 6: Biên dịch và chạy chương trình

——————————————————————————————————

—————————–

Bước 1: Tạo tên Solution

Tôi đặt solution cho ví dụ này là: NetRemotingAndWindowsServices

Để đơn giản, tầng ProxyObject Tôi chỉ viết 1 class gọi là PrimeProxy, class này có nhiệm vụ nhận vào 1 số nguyên từ tầng client, sau đó trả về dãy số nguyên tố từ 2 tới n và đồng thời cho biết client là người thứ mấy gọi yêu cầu lên server

Cách tạo : Vào menu File/ New/ chọn Project hoặc nhấn tổ hợp phím Ctrl+Shift+N

Cửa sổ New Project sẽ hiển thị ra, bạn hãy chọn Blank Solution trong mục Visual

Studio Solutions

Trong ô Name: Nhập tên NetRemotingAndWindowsServices sau đó nhấn nút OK.

Trang 15

Bạn quan sát trong mục Solution Explorer sẽ xuất hiện tên Solution mà bạn vừa tạo

Bước 2: Tiến hành tạo 3 Project cho Solution: Tầng ProxyObject, tầng Server và Client

– Tầng ProxyObject: Trong tầng này bạn phải chọn là Class Library

– Bấm chuột phải vào tên solution/ chọn Add / chọn New Project

– Sau khi bạn chọn New Project thì cửa sổ Add New Project xuất hiện, tại cửa

sổ này bạn hãy chọn Class Libray

– Trong ô Name: bạn gõ tên ProxyObject rồi click OK

– Tiếp theo bạn tạo tầng Server và Client, cách tạo 2 tầng này sẽ tương tự như tầng ProxyObject, nhưng chọn là Windows Forms Application thay vì Class Library

Trang 16

– Bạn tuần tự tạo xong các tầng, và quan sát Solution Explorer:

Ta có 3 Projects trong Solution NetRemotingAndWindowsServicesBước 3: Tiến hành viết coding cho tầng ProxyObject

– Đổi tên Class1 thành PrimeProxy và viết code như bên dưới:

using System;using

Trang 17

System.Collections.Generic;using System.Linq;using System.Text;

namespace ProxyObject{

public class PrimeProxy:MarshalByRefObject{//Biến lưu số lần client gọi hàm lấy danh sách nguyên tố

private int m_RequestNumber = 0;

//Biến lưu tên Client hiện tại gọi hàm

private string m_strCurrentClient = “”;

//Biến lưu danh sách tên các client đã connect tới server

private List<string> m_listClient = new List<string>();

//hàm kiểm tra số nguyên tố

public bool isPrime(int k)

//hàm thiết lập client hiện tại connect tới server và

//lưu client vào danh sách đã kết nối

public void setConnectClient(string clientName)

{

m_strCurrentClient = clientName;

Trang 18

if (!m_listClient.Contains(clientName)) m_listClient.Add(clientName);

}

//Hàm trả về danh sách các số nguyên tố public List<int> getListPrime(int n) {

Trang 19

Bước 4: Tiến hành viết coding cho tầng Server

Đổi class Form1.cs thành frmServer.cs và thiết kế giao diện như hình bên dưới:

server

Server

Trang 20

Tham chiếu tới ProxyObject: Bấm chuột phải vào References / Add Reference…

Cửa sổ Add Reference hiển lên, chọn ProxyObject rồi nhấn OK

Tương tự khi Add tham chiếu tới thư viện System.Runtime.Remoting, trường hợp này bạn chọn tab NET thay vì tab Project

Trang 21

Trong tab NET bạn chọn System.Runtime.Remoting rồi nhấn OK

Sau đó bạn quan sát tầng Server, nếu như nó như hình bên dưới là đã thành công:

– Bây giờ ta tiến hành viết code cho tầng Server, xem coding:

using System;using System.Collections.Generic;using

System.ComponentModel;

Trang 22

namespace TangServer

{

public partial class frmServer : Form

{

private TcpChannel tcpChannel = null;

private int port = 8998;

private Type type;

private WellKnownObjectMode wellKnownMode; private string objURI;

public frmServer()

{

InitializeComponent();

}

Trang 23

private void btnStart_Click(object sender, EventArgs e)

//tạo kênh truyền dữ liệu

tcpChannel = new TcpChannel(port);

(type, objURI, wellKnownMode);

txtStatus.Text = “khởi động server tại por ” + port.ToString() + ” lúc ” + DateTime.Now.ToString();

}

catch (Exception ex)

Trang 24

Bước 5: Tiến hành viết code cho Tầng Client

Đổi class Form1.cs thành frmClient.cs và thiết kế giao diện như hình bên dưới:

Trang 25

Control Tên Control Mô tả

Button btnConnect Bắt đầu kết nối tới server

ListBox lstbListPrime ListBox lưu dãy nguyên tốListBox lstbListClient ListBox lưu danh sách Client

Trang 26

Label lblMessage Số lần hàm được triệu gọi từ

client

– Tương tự như tầng Server, bạn tham chiếu tới tầng ProxyObject và thư viện System.Runtime.Remoting

– Bây giờ ta tiến hành viết code cho tầng Client, xem coding:

using System;using System.Collections.Generic;using

Trang 28

try

{

//xây dựng chuỗi URL để truy tìm tài nguyên trên server

URL = “tcp://” + txtIP.Text + “:” + txtPort.Text + “/PRIME_URI”; //đăng ký remote object

type = typeof(PrimeProxy);

RemotingConfiguration.RegisterWellKnownClientType(type, URL); //tạo proxy

primeObject = new PrimeProxy();

lblStatus.Text = “Đã tạo xong proxy, vui lòng nhập Client, nhập N:”; enableControl(true);

Trang 29

//Lấy danh sách các số nguyên tố từ server về

List<int> listPrime= primeObject.getListPrime(n);

//Đưa danh sách số nguyên tố lên ListBox

lstbListPrime.Items.Clear();

foreach(int x in listPrime)

lstbListPrime.Items.Add(x);

//Lấy danh sách Client tồn tại trên server

List<string> listClient = primeObject.ListClient;

//Đưa danh sách client lên Listbox

Trang 30

Bước 6: Biên dịch và chạy chương trình

Vào Menu Build / chọn Batch Build…Cửa sổ Batch Build sẽ hiển thị ra như bên dưới Trong cửa sổ này bạn checked hết các tầng muốn build, rồi bấm Build hoặc Rebuild

Trang 31

Sau khi biên dịch xong, bạn vào thư mục bin/release của tầng Server và Client Bạn tiến hành chạy chương trình:

Chạy tầng Server:

Chọn Port 8998, Singleton rồi bấm nút Khởi động, bạn sẽ được kết quả như hình trên Để hiểu rõ cơ chế Singleton và SingleCall như thế nào thì các bạn xem các topic về Net Remoting trong chuyên đề phát triển phần mềm mà tôi đã hướng dẫn.– Tiến hành chạy thử vài Client bạn sẽ có kế quả như hình bên dưới:

Các bạn chú ý là click nút Kết nối trước, sau đó mới click nút Lấy kết quả

Trang 32

Bạn có thể chạy nhiều client để kiểm tra kết quả.

============================================================

====================

Phần 2: Cấu hình chạy Server dưới dạng Windows ServicesBước 1: Tạo project Windows Services

Bước 2: Tạo project Setup cho bước 1

Bước 3: Cài đặt, chạy và kiểm tra services, eventlog

============================================================

====================

Chúng ta sẽ đi vào chi tiết từng bước

Bước 1: Tạo project Windows Services

Trang 33

Tương tự như khi tạo các tầng trước, bạn bấm chuột phải vào solution/ Add/ New Project.

Chọn Windows Service, nhập tên project là: MyPrimeServices rồi click Ok, sau khi click ok bạn quan sát sự thay đổi trong Solution:

Bạn double click vào tập tin Service1.cs (tập tin này mặc định được tạo ra cùng với project) Sau khi double click, cửa sổ Design màu xám của Services1.cs sẽ được

Trang 34

hiển thị ra, bạn click chuột vào vùng xám (không phải double click, tức là chỉ click chuột 1 lần)

Sau khi click chuột vào vùng xám, bạn đổi tên (Name) từ Service1

thành MyPrimeServices8998 như hình trên, 8998 ý tôi muốn ghi gợi nhớ là tôi muốntạo services chạy ở cổng 8998

Bây giờ ta tiến hành viết code cho class services của mình Trong vùng design màu xám, bạn click vào dòng chữ “Click here to switch to code view” hoặc nhấn phím F7

Mặc định ta sẽ có class như bên dưới:

using System;using System.Collections.Generic;using

System.ComponentModel;using System.Data;using System.Diagnostics;using System.Linq;

using System.ServiceProcess;

using System.Text;

namespace MyPrimeServices

Trang 35

protected override void OnContinue(){base.OnContinue();}protected override void OnPause(){

base.OnPause();

Trang 36

using System;using System.Collections.Generic;using

Trang 37

namespace MyPrimeServices

{

public partial class MyPrimeServices8998 : ServiceBase {

private TcpChannel tcpChannel = null;

private int port = 8998;

private Type type;

private WellKnownObjectMode wellKnownMode; private string objURI;

//tạo kênh truyền dữ liệu

tcpChannel = new TcpChannel(port);

ChannelServices.RegisterChannel(tcpChannel, false); //đăng ký remote object với Remoting framework

Trang 39

Bạn tìm tới EventLog trong danh mục Components, kéo thả control này vào vùng Design màu xám của Service1.cs Sau đó bạn tiến hành viết code cho eventlog, Tôi

sẽ hướng dẫn các bạn xem các thông tin Log này trong phần cuối, bây giờ bạn hãy xem code hoàn chỉnh mà Tôi cung cấp:

using System;using System.Collections.Generic;using

System.ComponentModel;

using System.Data;

using System.Diagnostics;

using System.Linq;

Trang 40

private TcpChannel tcpChannel = null;

private int port = 8998;

private Type type;

private WellKnownObjectMode wellKnownMode;

private string objURI;

Trang 41

//tạo kênh truyền dữ liệu

tcpChannel = new TcpChannel(port);

RemotingConfiguration.RegisterWellKnownServiceType(type, objURI, wellKnownMode);

eventLog1.WriteEntry(“khởi động server tại port ” + port.ToString() + ” lúc ”

Trang 43

protected override void OnStop()

Như vậy bạn đã hoàn thành xong class service MyPrimeServices8998

Tiếp theo ta tiến hành Add Installer cho Services, bằng cách bấm chuột phải vào vùng xám, chọn Add Installer

Chương trình sẽ tự động add thêm tập tin ProjectInstaller.cs, trong tập tin này cũng

tự động chứa serviceInstaller1 và serviceProcessInstaller1 như hình bên dưới:

Chỉnh sửa serviceProcessInstaller1:

Trang 44

Sửa Account thành: LocalSystem

Chỉnh sửa serviceInstaller1:

Sửa ServiceName thành : MyPrimeServices8998

Sửa StartType thành: Automatic

Sau khi chỉnh sửa xong, bạn tiến hành Build project MyPrimeServices.Bước 2: Tạo project Setup cho bước 1

Tương tự như các tầng khác, bạn cũng tạo 1 project mới và chọn là Setup Project trong mục Setup and Deployment/ Visual Studio Installer

Trang 45

Đặt tên project là : MyPrimeServicesSetup rồi click OK.

Bạn quan sát Solution explorer, chúng ta sẽ thấy tầng MyPrimeServicesSetup xuấn hiện như bên dưới

Để add Project mà bạn muốn cài đặt, bạn click chuột phải vào

project MyPrimeService/ chọn Add/ chọn ProjectOutput

Trang 46

Trong cửa sổ Add Project Output Group: bạn chọn MyPrimeServices và Primary output rồi nhấn nút OK.

Sau khi nhấn OK, bạn sẽ được kết quả như bên dưới:

Tiếp tục, bấm chuột phải vào MyPrimeServiceSetup/ View/ Custom Actions

Trang 47

Trong màn hình Design, bạn sẽ thấy như bên dưới:

Tiếp theo bạn bấm chuột phải vào Custom Actions/ chọn Add Custom Actions

Màn hiình Select Item in Project sẽ hiển thị ra như bên dưới

Trang 48

Tại màn hình này, bạn double click vào thư mục Application Folder rồi nhấn OK:

Sau khi nhấn OK, bạn thấy kết quả :

Để hoàn tất quá trình tạo Project Setup, bạn bấm chuột phải vào

MyPrimeServicesSetup, chọn Build/Rebuild:

Trang 49

Sau khi Build thành công thì mục Install và Uninstall sẽ cho phép bạn tương tác:

Bạn chọn Install để tiến hành cài đặt chương trình của mình tự tạo, qua bước 3 để xem chi tiết:

Bước 3: Cài đặt, chạy và kiểm tra services, eventlog

Sau khi chọn Install, màn hình cài đặt sẽ xuất hiện như bên dưới:

Bấm Next để tiếp tục:

Trang 50

Chờ chương trình cài đặt:

Bạn đã cài đặt thành công MyPrimeService Bây giờ để kiểm tra thực sự Service mà chúng ta tạo đã được tự động cài đặt hay chưa, bạn làm như sau:

Bấm chuột phải vào computer/ chọn Manage

Nếu bạn thấy trong Service có tồn tại MyPrimeServices8998 như hình dưới là thành công

Trang 51

Để xem eventlog mà chúng ta viết coding, thì bạn vào LOG8998 để quan sát:

Như vậy Service của chúng ta đã tự động cài đặt, bạn có thể Start hoặc Stop Service tùy thích bằng cách bấm chuột phải vào Service rồi chọn Start hoặc Stop

Bây giờ chúng ta chỉ cần chạy mỗi Client mà Thôi Server đã được Service tự động start rồi Bạn có thể tiến hành cài đặt Service ở bất kỳ máy chủ nào bằng cách lấy tậptin cài đặt trong tầng Setup cài vào máy chủ mong muốn, sau đó tại các máy client bạn chỉ cần nhập cho đúng IP của máy chủ và port 8998 là mọi việc OK

Ngày đăng: 15/08/2017, 19:45

TỪ KHÓA LIÊN QUAN

w