防火墙规则应用同一子网计算机,在关闭防火墙的同一子网上的两台计算机之间,WCF发现不起作用...

这个示例展示了WCF(Windows Communication Foundation)服务的简单发现功能,但仅限于单台计算机。当客户端和服务位于不同计算机且无防火墙的同一子网中时,该示例无法正常工作。问题可能在于网络配置或防火墙设置。代码包括服务端启动、客户端搜索服务并获取响应的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个简单的WCF发现示例适用于单个计算机,但是当客户端和服务器在同一子网中没有防火墙的不同计算机上运行时,它不起作用 . 我错过了什么?

using System;

using System.Linq;

using System.Net;

using System.Net.Sockets;

using System.ServiceModel;

using System.ServiceModel.Discovery;

namespace WCFDiscovery

{

class Program

{

static void Main(string[] args)

{

try { if (args.Length > 0) StartClient(); else StartServer(); }

catch (Exception ex) { Console.WriteLine(ex); }

finally { Console.WriteLine("press enter to quit..."); Console.ReadLine(); }

}

private static void StartServer()

{

var ipAddress = Dns.GetHostAddresses(Dns.GetHostName()).First(ip => ip.AddressFamily == AddressFamily.InterNetwork);

var address = new Uri(string.Format("net.tcp://{0}:3702", ipAddress));

var host = new ServiceHost(typeof(Service), address);

host.AddServiceEndpoint(typeof(IService), new NetTcpBinding(), address);

host.Description.Behaviors.Add(new ServiceDiscoveryBehavior());

host.AddServiceEndpoint(new UdpDiscoveryEndpoint());

host.Open();

Console.WriteLine("Started on {0}", address);

}

private static void StartClient()

{

var dc = new DiscoveryClient(new UdpDiscoveryEndpoint());

Console.WriteLine("Searching for service...");

var findResponse = dc.Find(new FindCriteria(typeof(IService)));

var response = ChannelFactory.CreateChannel(new NetTcpBinding(), findResponse.Endpoints[0].Address).Add(1, 2);

Console.WriteLine("Service response: {0}", response);

}

}

[ServiceContract] interface IService { [OperationContract] int Add(int x, int y); }

class Service : IService { public int Add(int x, int y) { return x + y; } }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值