在前一个文章中,我完成了一个SharedMemory的类.用于使用Win32 的内存映射文件.
写此类的目的在于这几天遇到的一个问题.
一个EXE程序和一个ASP.NET程序,之间要进行数据交换.
1,不想使用.NET Remoting
2,不想使用共享文件的方式(速度太慢了)
3,WebService更麻烦(速度更慢).
4,不知道别的方法了..
所以当时就找使用Win32 API的内存映射的方法.
当我在两个EXE程序中使用此类的时候,一切是正常的.
而且,在ASP.NET中,一个页面用来向此内存映射文件中写数据,另一个页面来读数据.可以正常使用.
但是,一个ASP.NET页面,一个EXE程序,EXE程序创建的内存映射文件,ASP.NET中不能得到(即Open函数返回的结果为0).反过来,也是一样的...
---一个奇怪的问题:(
想了半天,使用API的函数没有错.是不是ASP.NET的用户权限的问题呢??
直接在IIS中修改此ASP.NET工程的登陆帐号为Administrators组的,再运行,还是不行:(
.........
看来是没戏了...
(不可能的啊.别的API函数都可以使用啊.为什么这个不行呢??,,,难道还是权限的问题?)
IIS提供了一个功能,就是帐号模拟.
通过这个功能,我们可以设定运行此ASP.NET页面的帐号信息.
默认情况下面,这个功能是关闭的.
要开启这个功能,只要简单的在Web.Config中增加这个条目:
在这种情况下,用户身份的认证交给IIS来进行。当允许匿名登录时,IIS将一个匿名登录使用的标识(缺省情况下是IUSR_MACHINENAME)交给ASP.NET应用程序。
当不允许匿名登录时,IIS将认证过的身份标识传递给ASP.NET应用程序。ASP.NET的具体访问权限由该账号的权限决定。
或是,使用这个来直接指定帐号:
通过这个方式,我们指定由Administrators组的成员登陆,就可以正常读写其它EXE创建的内存映射文件了:)
注: 参考信息: http://www.microsoft.com/China/Community/program/originalarticles/TechDoc/impersonation.mspx
写此类的目的在于这几天遇到的一个问题.
一个EXE程序和一个ASP.NET程序,之间要进行数据交换.
1,不想使用.NET Remoting
2,不想使用共享文件的方式(速度太慢了)
3,WebService更麻烦(速度更慢).
4,不知道别的方法了..
所以当时就找使用Win32 API的内存映射的方法.
当我在两个EXE程序中使用此类的时候,一切是正常的.
而且,在ASP.NET中,一个页面用来向此内存映射文件中写数据,另一个页面来读数据.可以正常使用.
但是,一个ASP.NET页面,一个EXE程序,EXE程序创建的内存映射文件,ASP.NET中不能得到(即Open函数返回的结果为0).反过来,也是一样的...
---一个奇怪的问题:(
想了半天,使用API的函数没有错.是不是ASP.NET的用户权限的问题呢??
直接在IIS中修改此ASP.NET工程的登陆帐号为Administrators组的,再运行,还是不行:(
.........
看来是没戏了...
(不可能的啊.别的API函数都可以使用啊.为什么这个不行呢??,,,难道还是权限的问题?)
IIS提供了一个功能,就是帐号模拟.
通过这个功能,我们可以设定运行此ASP.NET页面的帐号信息.
默认情况下面,这个功能是关闭的.
要开启这个功能,只要简单的在Web.Config中增加这个条目:
<identity impersonate="true" />
在这种情况下,用户身份的认证交给IIS来进行。当允许匿名登录时,IIS将一个匿名登录使用的标识(缺省情况下是IUSR_MACHINENAME)交给ASP.NET应用程序。
当不允许匿名登录时,IIS将认证过的身份标识传递给ASP.NET应用程序。ASP.NET的具体访问权限由该账号的权限决定。
或是,使用这个来直接指定帐号:
<identity impersonate="true" userName="accountname" password="password" />
通过这个方式,我们指定由Administrators组的成员登陆,就可以正常读写其它EXE创建的内存映射文件了:)
注: 参考信息: http://www.microsoft.com/China/Community/program/originalarticles/TechDoc/impersonation.mspx