C # / WCF: заполнять и использовать ServiceInterface через конечную точку метаданных

#c# #.net #wcf

#c# #.net #wcf

Вопрос:

Я получил службу, которая предлагает именованный канал в качестве адреса точки подключения / конечной точки для сторонних приложений.

то, что я делал до сих пор, это:

 Uri[] baseAddress = new Uri[]{
new Uri("net.pipe://localhost")};

string PipeName = "Calculator";

serviceHost = new ServiceHost(typeof(CalculatorImplementation), baseAddress);

// Add a mex endpoint 
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.HttpGetUrl = new Uri("http://localhost:8001/CalculatorServer");
serviceHost.Description.Behaviors.Add(smb);

serviceHost.AddServiceEndpoint(typeof(ICalculator), new NetNamedPipeBinding(), PipeName);

serviceHost.Open();
  

Я подключаюсь к своему клиенту, используя ChannelFactory, подобный этому:

 ChannelFactory<ICalculator> pipeFactory = new ChannelFactory<ICalculator>(new NetNamedPipeBinding(), new EndpointAddress("net.pipe://localhost/Calculator"));

ICalculator pipeProxy = pipeFactory.CreateChannel();
  

Но на самом деле мне интересно, существует ли более «обычный» способ подключения к сервису.
Действительно ли мне нужно сообщать каждому стороннему приложению «строку подключения» / адрес конечной точки моего именованного канала («net.pipe://localhost / Calculator»)?

Я подумал, что может быть лучший способ добиться этого, но я пока не нашел способа сделать это.

Я уже создал эту «конечную точку mex», но я не уверен, как использовать эту конечную точку для заполнения именованного канала.

Мои вопросы таковы: я правильно заполняю интерфейс сервиса? и как мне правильно использовать конечную точку метаданных в клиентском приложении?

Комментарии:

1. «Может ли кто-нибудь помочь мне встать на ноги в этом вопросе?» Это слишком широко. Задайте более конкретный вопрос, а затем, если у вас возникнут дополнительные вопросы, задайте новые вопросы.

2. причины … спасибо за подсказку