Смущает использование имени хоста в файле WSDL в веб-службе C #

Я создал веб-службу WCF на C #, развернутую в EXE-файле службы Windows, который в основном работает так, как я хочу. Я использую его самостоятельно (не в 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-server: 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 (я имею в виду физический файл на диске) или он динамически отображается с каждым запросом?

6
задан John Saunders 1 June 2011 в 18:29
поделиться