Я создал веб-службу WCF на C #, развернутую в EXE-файле Windows Service, которая работает в основном так, как я хочу.Я использую его самостоятельно (не в IIS).
Чтобы сделать файл WSDL доступным для вызывающего веб-сервиса Java, я добавил ServiceMetadataBehavior для создания хоста.то есть:
ServiceHost host = new ServiceHost(typeof(MyService));
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
host.Description.Behaviors.Add(smb);
host.Open();
Это все работало нормально, пока я не перенес свою службу на другой сервер с другим именем хоста.Когда я подключаюсь к WSDL (http://prod -сервер: 55000 / MyService? Wsdl), я вижу, что имя хоста сервера разработки жестко закодировано в WSDL.
Вот фрагмент WSDL, видимый в браузере:
<wsdl:definitions name="MyService" targetNamespace="http://tempuri.org/">
<wsdl:import namespace="MyProject.ServiceContracts" location="http://dev-server:55000/MyService?wsdl=wsdl0"/>
<wsdl:types/>
Я проверил весь код C # в проекте, и имя сервера разработки нигде не задано жестко.
В файле App.config я определил следующее:
<system.serviceModel>
<services>
<service name="MyService">
<endpoint address="http://localhost:55000/MyService" binding="basicHttpBinding"
bindingConfiguration="" contract="MyProject.ServiceContracts.IMyInterface" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:55000/MyService" />
</baseAddresses>
</host>
</service>
</services>
Я ожидал бы, что это приведет к замене имени машины localhost,но оно сохраняется как имя блока разработки, на котором сервис был изначально создан / развернут.Я ошибаюсь?
Я также изучал возможность явного указания пути к моему WSDL-файлу, но из того, что я могу сделать вывод, это можно сделать только при размещении службы на IIS.
И наконец, просто из любопытства, мне интересно, действительно ли создается настоящий файл WSDL (я имею в виду физический файл на диске) или он динамически отображается с каждым запросом?