我在Windows 8 x 64以及Windows 7 x 64操作系统上遇到此问题。我有一个简单的WCF服务,它使用net.tcp绑定。
我已经按照许多文章撰写了这个简单的服务,包括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>
答案 0 :(得分:1)
让我们通过淘汰进行调试。 你启用了端口共享吗? 这是为了跨多个进程共享TCP端口。根据Microsoft&#34;此服务作为WCF的一部分安装,但默认情况下不启用该服务作为安全预防措施&#34;。
以下是如何使用MMC启用Net.TCP端口共享服务
您也可以在此配置中启用NetTcpBinding。
<system.serviceModel>
<bindings>
<netTcpBinding name="portSharingBinding"
portSharingEnabled="true" />
</bindings>
<services>
<service name="MyService">
<endpoint address="net.tcp://localhost/MyService"
binding="netTcpBinding"
contract="IMyService"
bindingConfiguration="portSharingBinding" />
</service>
</services>
</system.serviceModel>
如果启用了端口共享服务并手动启动它,请检查端口8523上是否有另一个应用程序正在运行。您可以在命令提示符中使用Netstat -a,也可以从以下地址使用TCPView。 TCPView