`
jiq408694711
  • 浏览: 33230 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

WIndows NT服务和普通进程之间大数据传输问题

 
阅读更多

问题:共享内存在Windows服务和普通进程之间无法工作

我的项目中有一个后台服务,开机自启动,然后会去服务器上获取大数据,缓存在自己的地址空间中。

另外一个进程(Windows Form界面)启动之后会来这个服务这里获取这些数据。


开始为了方便开发调试,我的后台服务并没有做成服务,开发时候就是一个直接的进程,称为进程A。

启动之后从服务器端获取大数据,然后通过共享内存的方式传递给进程B(即那个Windows form界面)。


我采用共享内存方式,因为要说到效率首先就想到共享内存,C#中共享内存的方法封装在MemoryMappedFile类中,CreateNew()创建共享内存,OpenExsisting()打开已有的共享内存来访问。

开发的时候,进程A以进程的方式运行,我的这个流程工作没有任何问题。


但是今天部署的时候,将进程A安装位Windows服务之后,共享内存就无论如何也不能工作了。

要么是找不到指定文件,要么就是什么错误也没有,但是什么也读不到。。。。

我在网上查了一下,貌似是说WIndows7下面 WIndows服务和进程是不能采用共享内存来进行数据传输的,而WIndows XP可以。。。 (我怎么觉得很不合理呢???)

引用网络上的一个帖子的回复:

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

从vista以后的版本都测试不通过,winXp和win2003测试通过。 好像是为了安全性吧

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

另外我想说的是,Windows服务和普通进程,以及WinForm这些之间都是可以采用命名管道来进行通信的。

消息队列也可以用于WIndows服务和普通进程之间的通信,只是创建队列的时候需要设置队列的权限,参见这里


这个问题亟需解决!!!

解决方法:命名管道

根据i命名管道的读写方法write(char[] buffer, int offset, int count),可以知道命名管道一次可以发送的数据量大小是int.MAXVALUE,就是2^31 = 2G。

所以一般来说同一个机器之间的大数据传输需求可以满足,下面是我的代码:

(一)这是WIndows服务中的一个线程,开启一个命名管道,等待获取大数据的请求:



(二)这是普通进程(window form)的代码,连接到命名管道,请求接收数据:



下面两个是用的到两个序列化的方法:



分享到:
评论

相关推荐

    Windows系统进程详解

    )(附:Svchost.exe文件对那些从动态连接库中运行的服务来说是一个普通的主机进程名。Svhost.exe文件定位在系统的 %systemroot%\system32文件夹下。在启动的时候,Svchost.exe检查注册表中的位置来构建需要加载的服务...

    IIS6.0 IIS,互联网信息服务

    最初是Windows NT版本的可选包,随后内置在Windows 2000、Windows XP Professional和Windows Server 2003一起发行,但在普遍使用的Windows XP Home版本上并没有IIS。 添加和运行准备  一、IIS的添加 请进入“控制...

    name pipes demo namepipes sample

    命名管道"或"命名管线"(Named Pipes)是一种简单的进程间通信(I P C)机制, Microsoft Windows NT,Windows 2000,Windows 95以及Windows 98均提供了对它的支持 (但不包括Windows CE).命名管道可在同一台计算机的不同...

    TCP/IP技术大全(中文PDF非扫描版)

    3.5 普通文件传输协议(TFTP) 26 3.6 简单邮件传输协议(SMTP) 26 3.7 网络文件系统(NFS) 26 3.8 简单网络管理协议(SNMP) 27 3.9 TCP/IP和系统结合 27 3.10 内部网概述 28 3.11 小结 28 第二部分 命名和寻址 第4章 IP...

    TCP-IP技术大全

    3.5 普通文件传输协议(TFTP) 26 3.6 简单邮件传输协议(SMTP) 26 3.7 网络文件系统(NFS) 26 3.8 简单网络管理协议(SNMP) 27 3.9 TCP/IP和系统结合 27 3.10 内部网概述 28 3.11 小结 28 第二部分 命名和寻址 第4章 IP...

    TCP/IP教程TCP/IP基础

    3.5 普通文件传输协议(TFTP) 26 3.6 简单邮件传输协议(SMTP) 26 3.7 网络文件系统(NFS) 26 3.8 简单网络管理协议(SNMP) 27 3.9 TCP/IP和系统结合 27 3.10 内部网概述 28 3.11 小结 28 第二部分 命名和寻址 第4章 IP...

    TCP/IP技术大全

    3.5 普通文件传输协议(TFTP) 26 3.6 简单邮件传输协议(SMTP) 26 3.7 网络文件系统(NFS) 26 3.8 简单网络管理协议(SNMP) 27 3.9 TCP/IP和系统结合 27 3.10 内部网概述 28 3.11 小结 28 第二部分 命名和寻址 第4章 IP...

    TCP/IP详解

    3.5 普通文件传输协议(TFTP) 26 3.6 简单邮件传输协议(SMTP) 26 3.7 网络文件系统(NFS) 26 3.8 简单网络管理协议(SNMP) 27 3.9 TCP/IP和系统结合 27 3.10 内部网概述 28 3.11 小结 28 第二部分 命名和寻址 第4章 IP...

    TCPIP协议详解(4-1)

    册组织 18 2.6.8 RFC编辑 18 2.6.9 Internet服务提供商 18 2.7 小结 19 第3章 TCP/IP概述 20 3.1 TCP/IP的优点 20 3.2 TCP/IP的层和协议 21 3.2.1 体系结构 21 3.2.2 传输控制协议 21 ...

    电脑变慢de完全解决方案.

    因为这样一来计算机在运行游戏、播放影碟时由于声卡占用CPU资源较高且其数据传输速度较慢,或者其根本无硬件解码而需要采用软件解码方式,常常会引起声音的停顿,甚至导致程序的运行断断续续。又如有些朋友的机器是...

    《计算机操作系统》期末复习指导

    进程互斥体现了进程之间对资源的竞争关系,这时进程相互之间不一定清楚其它进程情况,往往指多个任务多个进程间的通讯制约,因而使用更广泛。如打篮球时双方挣抢篮板球等。 (2)临界区 并发进程中与...

    入门学习Linux常用必会60个命令实例详解doc/txt

    因为Linux与Windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失,使系统处于不稳定的状态,甚至在有的系统中会损坏硬件设备(硬盘)。在系统关机前使用 shutdown命令,系统管理员会通知所有...

    CISCO 技术大集合

    CISCO 技术大集合 {适合你们的技术} 二、命令状态 1. router> 路由器处于用户命令状态,这时用户可以看路由器的连接状态,访问其它网络和主机,但不能看到和更改路由器的设置内容。 2. router# 在router>提示符...

    Linux操作系统基础教程

    第三讲 Linux下的网络服务,配置问题和常用工具.................................................................24 一.Linux下的网络服务.....................................................................

Global site tag (gtag.js) - Google Analytics