我使用以下代码创建了一个Windows服务:
protected override void OnStart(string[] args)
{
var localAddress = new Uri("net.pipe://localhost");
var netExposedAddress = new Uri("net.tcp://localhost:8523");
var addressCollection = new Uri[] { localAddress, netExposedAddress };
var type = typeof(AnalCron);
host = new ServiceHost(type, addressCollection);
host.AddServiceEndpoint(typeof(IAnalCron),
new NetNamedPipeBinding(),
"PipeReverse");
host.AddServiceEndpoint(typeof(IAnalCron),
new NetTcpBinding(SecurityMode.None),
"TcpReverse");
host.Open();
TheLoop();
}
我已经编写了测试,以确定在部署时是否可以与服务进行通信:
[TestMethod]
public void TestRemote()
{
var binding = new NetTcpBinding(SecurityMode.None);
var epAddrs = new EndpointAddress("net.tcp://192.168.201.27:8523/TcpReverse");
var pipeFactory =
new ChannelFactory<IAnalCron>(
binding,
epAddrs);
IAnalCron pipeProxy =
pipeFactory.CreateChannel();
var x = pipeProxy.ReverseString("bla");
Assert.AreEqual("alb", x);
}
[TestMethod]
public void TestLocal()
{
var binding = new NetNamedPipeBinding();
var epAddrs = new EndpointAddress("net.pipe://localhost/PipeReverse");
var pipeFactory =
new ChannelFactory<IAnalCron>(
binding,
epAddrs);
IAnalCron pipeProxy =
pipeFactory.CreateChannel();
var x = pipeProxy.ReverseString("bla");
Assert.AreEqual("alb", x);
}
当我使用本地计算机上的服务时没有出现问题但是当我使用上面的代码访问网络上的远程计算机时,我收到以下错误:
无法连接到net.tcp://192.168.201.27:8523 / TcpReverse。该 连接尝试持续时间为00:00:21.0231021。 TCP 错误代码10060:连接尝试失败,因为已连接 一段时间后,党没有正确回应,或已确立 连接失败,因为连接的主机无法响应 192.168.201.27:8523。
我试图输入机器名而不是IP地址,但没有运气。 .config文件中没有配置,我想在代码中设置所有内容。知道我做错了吗?
答案 0 :(得分:0)
正如@stuartd指出的那样,我的防火墙配置出了问题。当我将服务添加到例外列表时,通信继续顺利进行。