`
isiqi
  • 浏览: 16454004 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

利用IPC通道进行进程间通信(C#)

阅读更多
有一个解决方案,其中包括一个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# IPC 之 Socket 进程间通信 源码**"指的是使用C#语言通过Socket实现的进程间通信的源代码示例。Socket在IPC中的作用相当于一个通信通道,它允许两个程序通过网络接口进行数据传输,即使这两个程序位于同一...

    c# Remoting 实现进程间互相调用 并传递消息

    C# Remoting是.NET Framework提供的一种跨进程通信技术,它允许不同进程间的对象互相调用方法,实现分布式系统中的组件交互。在这个场景中,我们关注的是如何利用C# Remoting来实现在不同进程之间传递消息并进行互...

    C# 进程间通信 命名通道

    综上所述,"C# 进程间通信 命名通道"这一主题涵盖了进程间通信的基本原理,以及如何在C#中利用命名管道实现高效、可靠的通信。通过提供的代码资源,我们可以学习到如何创建服务器和客户端,以及进行有效的数据交换。...

    QT进程多个管道通信,并与C#客户端同时多个通信

    在QT中,命名管道(Named Pipes)是一种用于进程间通信(IPC, Inter-Process Communication)的方式,允许不同进程之间交换数据。在Windows操作系统中,命名管道是通过系统提供的API实现的,而在Unix/Linux系统中,...

    c# WPF 进程通信简易历程

    C#作为.NET框架的主要编程语言,提供了多种方法来实现进程间的通信(IPC)。本教程将围绕"C# WPF 进程通信简易历程"这一主题,深入探讨如何在WPF应用中进行进程通信,并通过一个实际的VS2010测试案例进行讲解。 ...

    通过WindowAPI实现进程间通讯

    进程间通信(IPC,Inter-Process Communication)是操作系统中一种重要的技术,允许不同进程之间交换数据和信息。在Windows环境中,Window API提供了多种方法来实现IPC。本篇将重点讨论如何利用Window API在WinForm...

    进程将通信

    在IT领域,进程间通信(IPC,Inter-Process Communication)是一项关键的技术,它允许不同的进程共享数据和资源,实现协同工作。在这个特定的场景中,我们关注的是C#语言中的管道通信,这是一种高效的IPC机制。下面...

    C.NET实现远程.rar_C# 远程_c#程序

    这通过.NET Remoting实现,它提供了透明的、安全的进程间通信(IPC)和网络通信。开发者可以创建可激活的服务器对象,并且在客户端通过接口调用这些对象的方法,仿佛它们就在本地执行一样。 1. 配置:创建远程对象...

    Callback

    本文将深入探讨标题中的"Callback"主题,结合C#语言和Windows Service服务程序,以及进程间通信(Inter-Process Communication, IPC)的相关知识。 首先,让我们了解什么是回调函数。回调函数是一种设计模式,它...

    dotnet 6 推荐一个可代替 .NET Remoting 的 IPC 库.rar

    标题中的“dotnet 6 推荐一个可代替 .NET Remoting 的 IPC 库”意味着这个压缩包包含的内容是关于使用 .NET 6 框架寻找替代 .NET Remoting 的进程间通信(IPC)解决方案的。.NET Remoting 是.NET Framework早期版本...

    一个进程间通讯同步的C#框架引荐

    进程间通信(IPC,Inter-Process Communication)是操作系统中不同进程之间交换数据的一种方式。在C#中,为了实现进程间的同步和通信,开发者通常需要借助各种技术手段,如命名管道、套接字、共享内存、消息队列等。...

    进程注入类 命名管道类 类似WPE

    命名管道是Windows操作系统提供的一种进程间通信(IPC)机制,它允许不同的进程之间共享数据。与传统的管道相比,命名管道提供了双向通信的能力,即两个进程都可以读写数据。在游戏外挂中,命名管道可能被用来在主...

    进程通讯、命名管道、一对多连接

    进程通讯(Inter-Process Communication, IPC)就是为了解决这个问题,提供了多种机制,如管道、信号量、消息队列、共享内存等,使得进程间可以安全有效地交换数据。在Windows系统中,命名管道(Named Pipe)是一种...

    C# socket实例,

    Socket是网络通信中的一个抽象概念,它是进程间通信(IPC)在网络层面上的实现,提供双向通信通道。在C#中,System.Net.Sockets命名空间下的Socket类是我们进行网络通信的核心工具。 在"C# socket实例"中,我们通常...

    细细品味C#(Remoting专题讲解)

    进程间通信(IPC)是解决不同进程间进行交互的机制,而Remoting正是为此目的服务的。 Remoting的工作原理是通过通道(channel)来实现两个应用程序域之间的对象通信。通道负责传递客户端请求到远程服务器上的对象,...

    C#_remoting基础

    C# Remoting是.NET框架提供的一种跨进程通信(IPC)技术,它允许对象在不同的应用程序域(AppDomain)之间进行交互,甚至可以跨越网络。在本文中,我们将深入探讨C# Remoting的基础知识,了解其核心概念、工作原理...

    教学监控系统【Socket通信】

    Socket是网络编程中的基本概念,它提供了进程间通信(IPC)的一种方式,尤其在分布式系统中,如本教学监控系统,Socket允许服务器与多个客户端进行双向通信。在VS2005中,使用C#语言开发时,可以利用System.Net命名...

    IPCPipesCoreObjectExchangeService

    这个服务可能基于IPC(Inter-Process Communication,进程间通信)技术,尤其是管道(Pipes)的概念,用于不同进程间的对象数据传输。在软件开发中,尤其是在多线程或多进程环境中,这种服务能够提供高效、低开销的...

    大型文件传输

    套接字是网络通信中的基础组件,它是进程间通信(IPC)的一种形式,特别适用于网络通信。在TCP/IP协议栈中,套接字提供了进程间的双向数据流通道。本项目利用了TCP套接字,因为它能保证数据的可靠传输,适合大文件的...

    dbus编译后的package-04

    DBus提供了一个标准的方法,使得进程间通信(IPC)变得更加简单和高效。在“dbus编译后的package-04”中,我们可以推测这是一个包含了DBus库或者相关应用的打包文件,可能包含了编译好的可执行文件、动态链接库、...

Global site tag (gtag.js) - Google Analytics