UDPEndpoint обнаружения WCF не работал после публикации в IIS

Я провел тест с UDPFndpoint WCF Discovery, он работает на моем собственном компьютере, но если я опубликую его в IIS, а затем вызову его с других компьютеров, он не будет найден.

Я установил адрес с IP.

обслуживание

using (ServiceHost host = new ServiceHost(typeof(DiscoveryProxy), new Uri("http://xx.xxxx.xxx.xxx:8080/DiscoveryProxy")))
{
    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
    smb.HttpGetEnabled = true;
    host.Description.Behaviors.Add(smb);
    ServiceEndpoint sep= host.AddServiceEndpoint(typeof(IDiscoveryProxy),new BasicHttpBinding(),"");
    sep.ListenUri = new Uri("http://xx.xxxx.xxx.xxx:8080/DiscoveryProxy/via");
    ServiceDiscoveryBehavior sdb = new ServiceDiscoveryBehavior();
    sdb.AnnouncementEndpoints.Add(new UdpAnnouncementEndpoint());
    host.Description.Behaviors.Add(sdb);
    host.AddServiceEndpoint(new UdpDiscoveryEndpoint());

    host.Open();
    Console.WriteLine("service is open");
    Console.ReadLine();
    host.Close();
}

Ссылка на службу добавлена ​​правильно на клиенте, и я мог просматривать службу из IE. Но это не могло быть открытием по UDP.

клиент

    DiscoveryClient client = new DiscoveryClient(new UdpDiscoveryEndpoint());
    FindResponse response = client.Find(new FindCriteria(typeof(myDiscoveryProxy)));
    if (response.Endpoints.Count > 0)
    {
        EndpointAddress address = response.Endpoints[0].Address;
        Console.WriteLine("service address is " + address);
        ServiceReference2.myDiscoveryProxyClient service = new ServiceReference2.myDiscoveryProxyClient(new BasicHttpBinding(), address);
        service.getString("discovery proxy");
    }

Я открыл порт UDP как в клиенте, так и в сервисе. Есть ли способ устранения этой проблемы?

1 ответ

Решение

Кажется, я выполнил свои требования. Я настраиваю брандмауэр на моей стороне службы. Брандмауэр Windows в режиме повышенной безопасности-> Правила для входящих подключений-> Новое правило-> Порт->UDP-> Все локальные порты-> Разрешить подключение-> Домен, Личный, Публичный-> Имя для этого правила. Но я не уверен, зачем мне это нужно, мое приложение уже настроило протокол UDP в брандмауэре.

Другие вопросы по тегам