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

时间:2012-12-27 18:35:14

标签:

c#

wcf

这个简单的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; } }

}

2 个答案:

答案 0 :(得分:2)

我在两台不同的机器上运行你的代码(笔记本电脑(Win7)和塔式电脑(Win8),.NET FW 4.5,相同的WiFi网络)并收到以下例外情况:

A remote side security requirement was not fulfilled during authentication. Try increasing the ProtectionLevel and/or ImpersonationLevel.

这是由于服务安全性未得到规定,终端被发现。所以,其他答案的人都是对的 - 这是一个网络问题,无法通过纠正代码来解决。

我想补充说,另一个可能的问题来源可能是网络交换机不允许UDP广播。

答案 1 :(得分:1)

要清楚,Windows防火墙是否也已关闭?

还要确保将服务器绑定到另一台计算机用来与之通信的地址。

Localhost或127.0.0.1可能无法获取与其外部(到主机)可寻址IP的连接,这是多播发现数据包将到达的位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值