Проблема в том, что метаданные службы (описание вашей службы) не экспортируются, поэтому Visual Studio не может создавать прокси-классы.
Эта ссылка объясняет, как экспортировать метаданные службы, изменив файл конфигурации xml или непосредственно в коде.
Все еще существует проблема с кодированной версией решения, представленной в ссылке, которую я объясню ниже.
При выполнении представленного кода вы получаете исключение, говорящее
The contract name 'IMetadataExchange' could not be found in the list of
contracts implemented by the service M6.Servico.GetCurve.GetCrvService.
Add a ServiceMetadataBehavior to the configuration file or to the ServiceHost
directly to enable support for this contract.
Чтобы это исправить, я просто изменил порядок, в котором все сделано. Сначала вы создаете поведение, устанавливаете его свойства и добавляете его к поведению хоста. После этого вы добавляете свои конечные точки, включая mexBinding
ServiceHost host = new ServiceHost(
typeof(MyService),
new Uri("http://localhost:8080/MyService"),
new Uri("net.tcp://localhost:9000/MyService"));
ServiceMetadataBehavior metadataBehavior =
new ServiceMetadataBehavior();
metadataBehavior.HttpGetEnabled = true;
host.Description.Behaviors.Add(metadataBehavior);
host.AddServiceEndpoint(
typeof(IMyService),
new WSHttpBinding(),
"");
host.AddServiceEndpoint(
typeof(IMyService),
new NetTcpBinding(),
"");
Binding mexBinding = MetadataExchangeBindings.CreateMexTcpBinding();
host.AddServiceEndpoint(
typeof(IMetadataExchange),
mexBinding,
"net.tcp://localhost:9000/MyService/mex");