在远程构建机器上,运行单元测试时出现以下错误。
测试方法MyNameSpace1.MyNameSpace2.Service.Test.MyPath.XYZServiceTest.FindRecord抛出异常: System.ServiceModel.EndpointNotFoundException:无法连接到net.tcp://localhost/MyABCServices/XYZService.svc。连接尝试持续时间跨度为00:00:02.0086605。 TCP错误代码10061:无法建立连接,因为目标计算机主动拒绝它127.0.0.1:808。 ---> System.Net.Sockets.SocketException:无法建立连接,因为目标计算机主动拒绝它127.0.0.1:808
我对此构建计算机的访问权限非常有限。我无法在构建机器上访问iis,也无法访问我在本地开发机器上执行的服务。单元测试在我的本地开发机器上运行,但它们在构建机器上运行上面提到的错误。
如何调试此错误?我看过像检查防火墙等的东西但是我不知道怎么做?我无法检查此服务的Windows服务是否已在构建计算机上运行。我试图登录到构建机器或将我的IIS连接到这台远程机器,但我不能。
答案 0 :(得分:9)
对我来说,最常见的问题是Windows Service Net.Tcp侦听器适配器未在主机上运行。
同时检查IIS Web应用程序以确保Enabled Protocols包含net.tcp。例如我有“http,net.tcp”,在我的绑定中我有“http::94:,net.tcp:194:”
我不知道有什么好方法可以远程检查IIS配置是否正确或Windows服务是否正在运行。您没有可以为您查看这些值的服务器管理员吗?
答案 1 :(得分:8)
答案 2 :(得分:2)
127.0.0.1:808
是否为实际IP:错误中报告的端口?如果是,那么您需要修复IP(127.0.0.1
与localhost
同义,因此这将是您的本地计算机。)
否则,这看起来像是防火墙问题。
防火墙有两个常见的来源:
路由器防火墙通常位于将内部网络连接到互联网的路由器上。在这些情况下,您(或有访问权限的人)将需要登录路由器并将端口转发到计算机的IP。仅当尝试通信的两台计算机不在同一内部网络上时,才需要这样做 例如,如果您的计算机通过Internet连接到服务器,则需要设置端口转发。如果两台计算机位于同一办公室的同一网络上,则不需要端口转发(大多数公司都不常见这种情况,但是有一个IT或网络人员来处理端口问题)。
假设您的服务器运行的是Windows,则需要具有管理员(?)访问权限的用户才能登录并打开端口或允许您的服务接受传入请求。由于您表示您无权访问服务器,我建议负责服务器的人员验证配置。
答案 3 :(得分:1)
正如我所读到的那样,“单元测试”显然需要一些本地主机地址的WCF net.tcp端点。所以,为了工作,你可以
我(显然)推荐第二种选择。
答案 4 :(得分:0)
感谢@sandeep和@Erik为我指出正确的方向。我的是Windows 10系统。我没有.NetTcpListender适配器。我有Net.tcp端口共享服务,并且已被禁用。我启用了它并启动了服务,它运行良好。现在,我将两个端点托管在如下所示的相同端口上
<services>
<service behaviorConfiguration="mybehaviorConfiguration" name="FirstClass">
<endpoint address="" binding="netTcpBinding" contract="IFirstClass"
bindingConfiguration="netTcpBindingConfiguration" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:5000/MyService/FirstClass" />
</baseAddresses>
</host>
</service>
<service behaviorConfiguration="mybehaviorConfiguration" name="SecondClass">
<endpoint address="" binding="netTcpBinding" contract="ISecondClass"
bindingConfiguration="netTcpBindingConfiguration" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:5000/MyService/SecondClass" />
</baseAddresses>
</host>
</service>
</services>