Visual studio 2010 从在VS2010和IIS7 Express下运行的WCF应用程序访问共享内存

Visual studio 2010 从在VS2010和IIS7 Express下运行的WCF应用程序访问共享内存,visual-studio-2010,iis,windows-services,shared-memory,Visual Studio 2010,Iis,Windows Services,Shared Memory,我正在开发一个WCF应用程序,它需要通过共享内存与自定义Windows服务进行通信。我的开发环境是带有IIS7、IIS7 Express和Visual Studio 2010的Windows 7 Professional 当我在VS2010之外的完全IIS7下运行应用程序时,效果非常好。但是,当我使用IIS7 Express或开发Web服务器(Cassini)从VS2010运行应用程序时,该应用程序无法与Windows服务通信。使用Process Explorer,我发现已为Windows服务中

我正在开发一个WCF应用程序,它需要通过共享内存与自定义Windows服务进行通信。我的开发环境是带有IIS7、IIS7 Express和Visual Studio 2010的Windows 7 Professional

当我在VS2010之外的完全IIS7下运行应用程序时,效果非常好。但是,当我使用IIS7 Express或开发Web服务器(Cassini)从VS2010运行应用程序时,该应用程序无法与Windows服务通信。使用Process Explorer,我发现已为Windows服务中的共享内存分配了以下名称:

Section \BaseNamedObjects\NSBUS.q
Section \BaseNamedObjects\NSBUS.b
Section \BaseNamedObjects\NSBUS.a
Section \Sessions\1\BaseNamedObjects\NSBUS.q
Section \Sessions\1\BaseNamedObjects\NSBUS.b
Section \Sessions\1\BaseNamedObjects\NSBUS.a
当WCF应用程序试图通过以下名称访问共享内存时:

Section \BaseNamedObjects\NSBUS.q
Section \BaseNamedObjects\NSBUS.b
Section \BaseNamedObjects\NSBUS.a
Section \Sessions\1\BaseNamedObjects\NSBUS.q
Section \Sessions\1\BaseNamedObjects\NSBUS.b
Section \Sessions\1\BaseNamedObjects\NSBUS.a
创建/访问共享内存块的代码对于应用程序和服务都是相同的(它封装在两者都使用的DLL中)。其中一个差异可能是一个因素:当我以我的登录ID(管理员组的成员)运行WCF应用程序时,服务被设置为在本地系统帐户上运行。我还猜测,可能VS2010以某种方式将自身注入运行时/调试环境,迫使应用程序引用特定于会话的共享内存,而不是真正的系统全局内存


关于如何配置我的环境以使WCF应用程序使用与服务使用的相同的节名,有什么建议吗?(顺便说一句,该服务在启动时创建共享内存。)

我这里有类似的问题,你解决了吗?@tulkas85:没有,不幸的是,我没有找到解决方案。我自己解决了,但可能不是最好的解决方案,请参阅我的编辑: