Один и тот же сервисный контракт WCF в нескольких экземплярах сервера - PullRequest
0 голосов
/ 02 февраля 2020

Я пытаюсь создать несколько экземпляров одного и того же сервера WCF (NetNamedPipes) (запуск приложения несколько раз), но сталкиваюсь с проблемой при запуске второго экземпляра ... Экземпляры сервера используют разные имена каналов и имена конечных точек. Я использовал пример из здесь , устанавливая только конечную точку и имя канала через аргументы запуска. Но во втором случае я получаю сообщение об ошибке, что существует неисправное состояние и, следовательно, не может быть открыт сервисный узел.

Использование связывания Http с различными портами работает, но я хотел бы придерживаться именованных каналов.

Сервер:

[ServiceContract]
public interface IServiceContract
{
    [OperationContract]
    string Operation(string value);
}

class Program : IServiceContract
{
    static void Main(string[] args)
    {
        Console.WriteLine($"Pipe: {args[0]}");
        Console.WriteLine($"Endpoint: {args[1]}");

        ServiceHost sh = new ServiceHost(typeof(Program), new Uri($"net.pipe://{args[0]}"));

        sh.AddServiceEndpoint(typeof(IServiceContract), new NetNamedPipeBinding(), args[1]);

        sh.Open();

        Console.ReadLine();
    }

    public string Operation(string value)
    {
        return value.ToUpper();
    }
}

Сообщение об ошибке: AddressAlreadyInUseException, поскольку другая конечная точка уже прослушивает эту конечную точку.

1 Ответ

1 голос
/ 04 февраля 2020

В связи с тем, что служба механизма NetNamedPipeBinding может принимать вызовы только от одного компьютера, имя канала является строкой уникального идентификатора для адреса канала. Мы можем открыть только один именованный канал на одном и том же компьютере, поэтому два адреса именованных каналов не могут иметь одно и то же имя канала на одном и том же компьютере.
Кроме того, как вы упомянули, URI в форме NetNamedPipeBinding - это

Net .pipe: // localhost / mypipe

Вот несколько ссылок, wi sh это полезно для вас.
WCF Именованный канал в Windows Сервис с использованием App.Config
Как исправить AddressInUseException, возникающее при каждом открытии хоста службы
Не стесняйтесь, дайте мне знать, если есть что-то, чем я могу помочь с.

...