【发布时间】:2016-04-02 10:33:58
【问题描述】:
我在 Windows 8 x 64 和 Windows 7 x 64 操作系统上遇到了这个问题。我有一个使用 net.tcp 绑定的简单 WCF 服务。
我已经关注了很多文章来编写这个简单的服务,包括 MSDN 上的以下内容:Hosting and Consuming WCF services
我的服务和配置文件和上面的文章完全一样。
使用 InstallUtil.exe 作为 Windows 安装此 WCF 服务后 服务,我可以看到服务安装正确并且它 运行没有任何错误。我试图在 OnStart 和 Windows 服务的 OnStop 方法,并没有发现任何问题。 一旦我尝试从另一个解决方案中引用此端点,我 出现以下错误。
无法连接到 net.tcp://localhost:8523/Inbound。连接 尝试持续了 00:00:00.9531494 的时间跨度。 TCP错误代码 10061:无法建立连接,因为目标机器 127.0.0.1:8523 主动拒绝。
我已经在互联网上尝试了大多数与此问题相关的帖子,还尝试过打开防火墙、卸载防病毒软件、尝试不同的端口、在防火墙中为这些端口明确创建入站和出站规则等。仍然我无法访问托管我基于 net.tcp 的 WCF 服务的 Windows 服务。我的 TCP 端口共享服务和 TCP 侦听器适配器服务已打开,并且我已打开运行这些 TCP 服务所需的必要 Windows 功能。
我可以看到,我总是可以在另一个项目的同一个解决方案中访问这个服务,因为当我尝试引用这个服务时,Visual Studio 会立即创建一个 Wcf 服务主机 (WcfSvcHost),它会找到所有端点当前解决方案中的项目并加载它们。只要此主机正在运行,我也可以在另一个解决方案中引用此服务而不会出现问题。
托管我的服务的 Windows 服务也与给定的代码相同。显然,这会创建 ServiceHost 的实例并运行它。我已经用一些日志验证了这一点,它在服务启动时成功执行。但是当我的服务启动时,我无法在任务管理器中看到此进程正在运行。当我在同一个解决方案中调试或尝试在上述同一个解决方案中引用时,我可以在 Visual Studio 运行它时看到此服务。
现在我的问题是,我应该在我的服务启动时在任务管理器中看到这个 WcfSvceHost 服务吗?我相信我应该。请纠正我,如果我 我错了。
我是否需要向我的 Windows 服务授予任何特殊权限才能运行此 ServiceHost,还是问题完全不同?我在这里忽略了一些非常明显的东西吗?任何帮助将不胜感激。谢谢。
这是我的配置文件。
<system.serviceModel>
<bindings />
<client />
<services>
<service name="MyWcfServiceLibrary.WCFService">
<endpoint address="" binding="netTcpBinding" bindingConfiguration="" name="TCPEndPoint" contract="MyWcfServiceLibrary.IWCFService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" name="mexEndPoint" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://127.0.0.1:8523/MyWCFService" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
【问题讨论】:
-
这里的问题是一个愚蠢的错误。我很抱歉。我无法发布我的服务类代码,因为堆栈溢出不允许我。在 myServiceHost = new ServiceHost(typeof(MyWCFService)) 中,我错误地引用了 windows 服务类而不是 WCF 服务。这就是它没有创建 WCF 服务主机的原因。阿里亚,我感谢你的帮助。谢谢。
标签: c# .net wcf windows-services net.tcp