Почему ServiceHost выдает исключение, когда я добавляю UdpAnnouncementEndpoint в ServiceDiscoveryBehavior?C#

Место общения программистов C#
Ответить
Anonymous
 Почему ServiceHost выдает исключение, когда я добавляю UdpAnnouncementEndpoint в ServiceDiscoveryBehavior?

Сообщение Anonymous »

ServiceHost выдает исключение NullReferenceException, когда я пытаюсь облегчить объявление службы. Я делаю это именно так, как описано здесь
Изображение

Ниже приведен полный работающий код, иллюстрирующий проблему.
Я запустил его как консольное приложение .netFramework 4.8 с добавленными ссылками на System.ServiceModel и System.ServiceModel.Discovery.
Поскольку кто-то, вероятно, спросит, использование UdpDiscovery работает правильно.
using System;
using System.ServiceModel;
using System.ServiceModel.Discovery;

[ServiceContract(CallbackContract = typeof(IServerCallback))]
public interface IServer
{
[OperationContract]
void Connect();
}

[ServiceContract]
public interface IServerCallback
{
[OperationContract]
void KeepAlive();
}

public class MyServiceHost where TServer : TContract where TContract : IServer
{
private readonly ServiceHost _serviceHost;
private const string MyIp = "10.82.83.84";

public MyServiceHost(TServer server)
{
var uri = new Uri($"net.tcp://{MyIp}:8586");
_serviceHost = new ServiceHost(server, uri);
StartServer();
}

private void StartServer()
{
//Endpoint.
var contract = typeof(TContract);
_serviceHost.AddServiceEndpoint(contract, new NetTcpBinding(), contract.Name);

//https://learn.microsoft.com/en-us/dotne ... he-service

ServiceDiscoveryBehavior serviceDiscoveryBehavior = new ServiceDiscoveryBehavior();
serviceDiscoveryBehavior.AnnouncementEndpoints.Add(new UdpAnnouncementEndpoint());
_serviceHost.Description.Behaviors.Add(serviceDiscoveryBehavior);

_serviceHost.Open();
}
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single)]
public class Server : IServer
{
public void Connect()
{ }
}
public static class Test
{
public static void Main(string[] args)
{
var myServiceHost = new MyServiceHost(new Server());
while (Console.ReadLine() != "q"){}
}
}



Подробнее здесь: https://stackoverflow.com/questions/790 ... entendpoin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»