有一个解决方案,其中包括一个Windows服务和一个Windows应用程序,两者之间需要进行通信。查了下,可以使用多种方法,如Web service(适用于不同系统及跨平台情况)、.NET Remoting、消息队列、WCF(集成了前述方法的功能,但太新,不支持Windows2000及以前的系统),其中Remoting可以支持TCP、HTTP、IPC通道的通信,而IPC通道速度快,且仅能供处于同一个系统中的进程间进行通讯,而这正好符合本项目的要求,故决定采用.NET Remoting的IPC方法:
开发平台为Visual Studio 2005,.NET framework版本为2.0
1、 建立空白解决方案
2、 添加两个新工程项目Console Application:Server和Client
3、 添加一个Class Library:RemoteObject
4、 三个项目的源代码Server.cs、Client.cs、RemoteObject.cs分别附后
5、 在Server和Client项目的引用中添加两个程序集:
System.Runtime.Remoting程序集(.net组件)和RemoteObject程序集(工程组件)
6、 生成两个工程之后,双击打开Server程序,再打开Client,可以看到两者通信。
7、 程序逻辑很简单:
Client根据约定好的对象地址(URI)“ipc://ServerChannel/RemoteObject”去服务器上访问RemoteObject对象。Server在收到访问对象的消息之后,实例化一个RemoteObject对象。当Client得到生成的RemoteObject对象句柄后,调用其Greeting方法,这个调用被传递到Server端执行(因为RemoteObject对象实际上是在Server上),然后返回Greeting方法的结果给Client。
8、 简言之,即完成了Client进程访问Server进程的一个对象,并调用此对象的方法的任务。
9、 源代码:
RemoteObject.cs
using
System; public class RemoteObject : MarshalByRefObject { public RemoteObject() {
Console.WriteLine("Constructor called"); } public string
Greeting(string name) {
Console.WriteLine("Greeting called"); return "Hello," + name; } }
|
Server.cs
using
System; using System.Runtime.Remoting; using
System.Runtime.Remoting.Channels; using
System.Runtime.Remoting.Channels.Ipc;
public
class Server { public static void Main(string[]
args) { //Instantiate our
server channel. IpcServerChannel channel = new IpcServerChannel("ServerChannel"); //Register the server
channel. ChannelServices.RegisterChannel(channel,
false); //Register this
service type. RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject), "RemoteObject", WellKnownObjectMode.SingleCall); Console.WriteLine("press
return to exit"); Console.ReadLine(); } }
|
Client.cs
using
System; using System.Runtime.Remoting; using
System.Runtime.Remoting.Channels; using
System.Runtime.Remoting.Channels.Ipc; public
class Client { public static void Main(string[]
args) { //Create an IPC client
channel. IpcClientChannel channel = new IpcClientChannel(); //Register the channel
with ChannelServices.
ChannelServices.RegisterChannel(channel, false); RemoteObject obj
= (RemoteObject)Activator.GetObject(typeof(RemoteObject), "ipc://ServerChannel/RemoteObject");
if
(obj == null) { Console.WriteLine("could
not locate server");
return; }
for (int i =
1; i < 5; i++) {
Console.WriteLine(obj.Greeting("mmpire")); } } }
|
Server输出:
press return to exit
Constructor called
Greeting called
Constructor called
Greeting
called
Constructor called
Greeting called
Constructor called
Greeting called
Client输出:
Hello,mmpire
Hello,mmpire
Hello,mmpire
Hello,
分享到:
相关推荐
标题"**C# IPC 之 Socket 进程间通信 源码**"指的是使用C#语言通过Socket实现的进程间通信的源代码示例。Socket在IPC中的作用相当于一个通信通道,它允许两个程序通过网络接口进行数据传输,即使这两个程序位于同一...
C# Remoting是.NET Framework提供的一种跨进程通信技术,它允许不同进程间的对象互相调用方法,实现分布式系统中的组件交互。在这个场景中,我们关注的是如何利用C# Remoting来实现在不同进程之间传递消息并进行互...
综上所述,"C# 进程间通信 命名通道"这一主题涵盖了进程间通信的基本原理,以及如何在C#中利用命名管道实现高效、可靠的通信。通过提供的代码资源,我们可以学习到如何创建服务器和客户端,以及进行有效的数据交换。...
在QT中,命名管道(Named Pipes)是一种用于进程间通信(IPC, Inter-Process Communication)的方式,允许不同进程之间交换数据。在Windows操作系统中,命名管道是通过系统提供的API实现的,而在Unix/Linux系统中,...
C#作为.NET框架的主要编程语言,提供了多种方法来实现进程间的通信(IPC)。本教程将围绕"C# WPF 进程通信简易历程"这一主题,深入探讨如何在WPF应用中进行进程通信,并通过一个实际的VS2010测试案例进行讲解。 ...
进程间通信(IPC,Inter-Process Communication)是操作系统中一种重要的技术,允许不同进程之间交换数据和信息。在Windows环境中,Window API提供了多种方法来实现IPC。本篇将重点讨论如何利用Window API在WinForm...
在IT领域,进程间通信(IPC,Inter-Process Communication)是一项关键的技术,它允许不同的进程共享数据和资源,实现协同工作。在这个特定的场景中,我们关注的是C#语言中的管道通信,这是一种高效的IPC机制。下面...
这通过.NET Remoting实现,它提供了透明的、安全的进程间通信(IPC)和网络通信。开发者可以创建可激活的服务器对象,并且在客户端通过接口调用这些对象的方法,仿佛它们就在本地执行一样。 1. 配置:创建远程对象...
本文将深入探讨标题中的"Callback"主题,结合C#语言和Windows Service服务程序,以及进程间通信(Inter-Process Communication, IPC)的相关知识。 首先,让我们了解什么是回调函数。回调函数是一种设计模式,它...
标题中的“dotnet 6 推荐一个可代替 .NET Remoting 的 IPC 库”意味着这个压缩包包含的内容是关于使用 .NET 6 框架寻找替代 .NET Remoting 的进程间通信(IPC)解决方案的。.NET Remoting 是.NET Framework早期版本...
进程间通信(IPC,Inter-Process Communication)是操作系统中不同进程之间交换数据的一种方式。在C#中,为了实现进程间的同步和通信,开发者通常需要借助各种技术手段,如命名管道、套接字、共享内存、消息队列等。...
命名管道是Windows操作系统提供的一种进程间通信(IPC)机制,它允许不同的进程之间共享数据。与传统的管道相比,命名管道提供了双向通信的能力,即两个进程都可以读写数据。在游戏外挂中,命名管道可能被用来在主...
进程通讯(Inter-Process Communication, IPC)就是为了解决这个问题,提供了多种机制,如管道、信号量、消息队列、共享内存等,使得进程间可以安全有效地交换数据。在Windows系统中,命名管道(Named Pipe)是一种...
Socket是网络通信中的一个抽象概念,它是进程间通信(IPC)在网络层面上的实现,提供双向通信通道。在C#中,System.Net.Sockets命名空间下的Socket类是我们进行网络通信的核心工具。 在"C# socket实例"中,我们通常...
进程间通信(IPC)是解决不同进程间进行交互的机制,而Remoting正是为此目的服务的。 Remoting的工作原理是通过通道(channel)来实现两个应用程序域之间的对象通信。通道负责传递客户端请求到远程服务器上的对象,...
C# Remoting是.NET框架提供的一种跨进程通信(IPC)技术,它允许对象在不同的应用程序域(AppDomain)之间进行交互,甚至可以跨越网络。在本文中,我们将深入探讨C# Remoting的基础知识,了解其核心概念、工作原理...
Socket是网络编程中的基本概念,它提供了进程间通信(IPC)的一种方式,尤其在分布式系统中,如本教学监控系统,Socket允许服务器与多个客户端进行双向通信。在VS2005中,使用C#语言开发时,可以利用System.Net命名...
这个服务可能基于IPC(Inter-Process Communication,进程间通信)技术,尤其是管道(Pipes)的概念,用于不同进程间的对象数据传输。在软件开发中,尤其是在多线程或多进程环境中,这种服务能够提供高效、低开销的...
套接字是网络通信中的基础组件,它是进程间通信(IPC)的一种形式,特别适用于网络通信。在TCP/IP协议栈中,套接字提供了进程间的双向数据流通道。本项目利用了TCP套接字,因为它能保证数据的可靠传输,适合大文件的...
DBus提供了一个标准的方法,使得进程间通信(IPC)变得更加简单和高效。在“dbus编译后的package-04”中,我们可以推测这是一个包含了DBus库或者相关应用的打包文件,可能包含了编译好的可执行文件、动态链接库、...