我配置了一组NetTCP服务,这些服务在Windows服务下运行以进行生产,但我使用控制台应用程序将它们旋转以进行调试。在Windows Vista中,我彻底禁用了UAC,因为它很烦人,但是我试图让它启用7,因为它可以做我想要的一切,同时非常安静而不是唠叨。
我遇到的问题是在“标准”模式下运行VS时(即不使用以管理员身份运行),服务不会启动,因为它说明了这一点:
“服务端点无法侦听URI'net.tcp:// localhost:60000 / [ServiceName]',因为访问被拒绝。请验证当前用户是否在SMSvcHost.exe的相应allowedAccounts部分中被授予访问权限的.config“。
经过一些研究后,我能够找到这个文件并使用我的用户帐户的SID进行修改。配置如下所示:
<?xml version="1.0" encoding="utf-8"?><configuration>
<runtime>
<gcConcurrent enabled="false" />
<generatePublisherEvidence enabled="false" />
</runtime>
<system.serviceModel.activation>
<net.tcp listenBacklog="10" maxPendingConnections="100" maxPendingAccepts="2" receiveTimeout="00:00:10" teredoEnabled="false">
<allowAccounts>
<add securityIdentifier="S-1-5-21-XXXXXXX"/>
</allowAccounts>
</net.tcp>
<net.pipe maxPendingConnections="100" maxPendingAccepts="2" receiveTimeout="00:00:10">
<allowAccounts>
<add securityIdentifier="S-1-5-21-XXXXXXX"/>
</allowAccounts>
</net.pipe>
<diagnostics performanceCountersEnabled="true" />
</system.serviceModel.activation></configuration>
SID来自Sysinternals套件中打包的工具,并且针对ADSI Edit进行了验证,因此我知道它是正确的。重新启动后,服务仍然不会启动,我试图避免强制它在管理模式下运行,因为那时你不能再双击解决方案或项目文件了,这是相当恼人的。
有人有什么想法吗? SMSvcHost.exe.config文件来自“C:\ Windows \ Microsoft.NET \ Framework \ v3.0 \ Windows Communication Foundation”,即使我正在运行x64,该应用程序也是在x86模式下编译的。我不确定这是不是我的麻烦所在?
答案 0 :(得分:2)
要查找“正确”的配置文件位置,请执行以下操作: 在任务管理器的serivce选项卡中找到NetTcpPortSharing。 在上下文菜单中单击“转到”处理。 单击“打开文件位置”。
PS。 在我的带有.NET 4位置的Windows 2008 R2 x64上是C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319