3

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

当我在完整的 IIS7 下在 VS2010 之外运行该应用程序时,它运行良好。但是当我使用 IIS7 Express 或 Development Web Server (Cassini) 从 VS2010 运行应用程序时,应用程序无法与 Windows 服务通信。使用 Process Explorer 我发现 Windows 服务中的共享内存已分配名称:

Section \BaseNamedObjects\NSBUS.q
Section \BaseNamedObjects\NSBUS.b
Section \BaseNamedObjects\NSBUS.a

当 WCF 应用程序尝试通过名称访问共享内存时:

Section \Sessions\1\BaseNamedObjects\NSBUS.q
Section \Sessions\1\BaseNamedObjects\NSBUS.b
Section \Sessions\1\BaseNamedObjects\NSBUS.a

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

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

4

0 回答 0