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

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

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

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

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

пожалуйста

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

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

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

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.

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

На стороне сервера, вы должны поместить это в файл конфигурации (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> 
<add baseAddress="net.tcp://xx.xx.xxx.xxx:808/">
<add baseAddress="http://xx.xx.xxx.xxx:8080/">

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

Другие вопросы по тегам