Конфигурация базового адреса WCF для различных реализаций сервера

Я не знаю, повторяется ли это вопрос или нет, но из-за моего поиска я не смог найти ничего связанного.

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

когда я хочу установить свое программное обеспечение для клиента на его сервере, мне нужно изменить базовый адрес на соответствующий IP-адрес на сервере. Кроме того, на разных серверах могут быть разные IP-адреса для разных клиентов, и я не хочу развертывать службу wcf с ее конкретным базовым адресом для каждого клиента.

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

Пожалуйста

В моем сервисе я использую два базовых адреса, например:

<add baseAddress="localhost:8080/"/>;

И еще один такой же, но с привязкой net.tcp. Я хочу знать вместо localhost, как я могу использовать IP-адрес, когда моя служба развертывается на серверах клиентов.


person H.A    schedule 23.06.2014    source источник
comment
Взгляните на файлы конфигурации на стороне сервера WCF - там вы можете легко определить базовый адрес для всех конечных точек вашей службы! См., Например, stackoverflow.com/questions/18528302/wcf-base-addresses   -  person marc_s    schedule 23.06.2014
comment
В своей службе я использую два базовых адреса, например: ‹add baseAddress = localhost: 8080 /› и еще один, например то же самое, но с привязкой net.tcp. Я хочу знать вместо localhost, как я могу использовать IP-адрес, когда моя служба развертывается на серверах клиентов.   -  person H.A    schedule 23.06.2014
comment
Какой механизм вы используете для развертывания программного обеспечения на серверах вашего клиента? Решение будет зависеть от этого, и если что-то в этом процессе можно использовать для редактирования конфигурации.   -  person    schedule 23.06.2014
comment
Я использую службу Windows для развертывания своей службы, а для клиента я использую приложение Windows Forms C #. Как ты думаешь, я должен это делать? @SujaySarma   -  person H.A    schedule 23.06.2014
comment
Рассмотрите возможность программной настройки конечных точек: stackoverflow.com/questions/6118221/   -  person Martin Brandl    schedule 23.06.2014


Ответы (3)


В исходном коде проекта вашего приложения в Visual Studio у вас будет файл app.config, web.config или аналогичный файл .config, который вы добавили. Я предполагаю, что в вашем коде развертывания (ваша служба Windows, PowerShell или что-то еще) вы создаете копию этого файла .CONFIG на вашем целевом сервере или компьютере.

Следовательно, в исходной версии (версии исходного кода проекта) у вас есть токены вместо фактических имен серверов или IP-адресов. Например, если ваше фактическое имя хоста - localhost, вместо того, чтобы иметь

<add baseAddress="localhost:8080/" />

У тебя должно быть:

<add baseAddress="[ServerName]:[Port]/" />

Где «[ServerName]» и «[Port]» - токены, которые будут заменены позже. В сценарии развертывания найдите эти токены и замените их (простая замена строки) фактическим DNS-именем или IP-адресом сервера. Вы можете получить имя сервера или IP-адрес из любого механизма, который вы используете для развертывания на этом сервере из вашей службы Windows.

Надеюсь, это поможет, дайте мне знать, если вам понадобится дополнительная помощь.

person Community    schedule 23.06.2014
comment
Могу ли я сделать то же самое в клиентском файле App.config? @SujaySarma - person H.A; 23.06.2014
comment
Да, именно здесь я и говорю, что вы должны это сделать. - person ; 24.06.2014
comment
А как насчет файла App.config на стороне сервера? Это тоже то же самое? @SujaySarma - person H.A; 24.06.2014
comment
Большое спасибо за Вашу помощь. @SujaySarma - person H.A; 25.06.2014

<add baseAddress="net.tcp://xx.xx.xxx.xxx:808/">
<add baseAddress="http://xx.xx.xxx.xxx:8080/">

первый предназначен для TCP, а второй - для привязки http, где xx.xx.xxx.xxx - ваш IP-адрес, на котором размещена служба.

person TRS    schedule 23.06.2014

На стороне сервера вам нужно поместить это в свой файл конфигурации (app.config или web.config):

<services>
   <service name="YourServiceNameHere" ......>
      <host>
         <baseAddresses>
            <add baseAddress="http://YourServerName:Port/SameBaseUrl"/>
            <add baseAddress="net.tcp://YourServerName:Port/SameBaseUrlForTcp"/>
         </baseAddresses>
      </host>
      <endpoint name="DefaultEndpoint" address="MyAwesomeService" ... />
      .........
   </service>
</services>

или все, что вы хотите / нуждаетесь.

На стороне клиента - у вас не может быть базовых адресов - каждая конечная точка должна ссылаться только на один четко определенный адрес на стороне сервера:

<client> 
   <endpoint name=".." 
             address="http://YourServerName:Port/SameBaseUrl/MyAwesomeService"
             binding="basicHttpBinding" 
             contract="IYourServiceContract" />
</client> 
person marc_s    schedule 23.06.2014