使用名称而不是IP连接到WCF服务

时间:2012-11-30 14:26:04

标签: c# wcf

嘿,我已经制作了WCF服务,并希望能够使用我设置的dns连接到它? 因为现在我必须通过计算机ip同步到baseaddress。 DHCP有时会提供新的IP,然后客户端必须知道新的IP等等......你希望得到它:)

那么如何通过名称进行连接呢?并且喜欢在baseaddress中使用localhost

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="metaAndErrors" 
               name="VenatoWCF.WCFService">
        <endpoint address="http://localhost:8732/End"
                  binding="basicHttpBinding"
                  contract="VenatoWCF.IService">
          <identity>
            <dns value="dendei"/>
          </identity>
        </endpoint>
        <endpoint address="http://localhost:8732/mex" 
                  binding="mexHttpBinding" 
                  contract="IMetadataExchange">
          <identity>
            <dns value="dendei"/>
          </identity>
        </endpoint>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8732/VenatoWCFconsole/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="metaAndErrors">
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

一直尝试这样的事情,但没有运气xD,我想从客户端连接“http:// dendei:8732 / VenatoWCFconsole /”

所以即使我的ip更改了客户端也不必进行更改以连接到我

谢谢你的回答!

3 个答案:

答案 0 :(得分:0)

无论如何,都必须提供端点地址(即ip / port)。如果该值设置为频繁更改,我将在您的客户端和服务之间设置端口转发器。

http://en.wikipedia.org/wiki/Port_forwarding

答案 1 :(得分:0)

我认为这是一个应该“正常工作”的情景。如图所示,服务配置中的服务基地址应该能够使用localhost。在客户端配置中,您应该使用运行服务的主机的DNS名称配置端点地址。

检查客户端计算机是否可以使用DNS名称ping服务计算机。如果解决没问题,则没有理由不让WCF连接。只要客户端仍然可以将DNS名称解析为新的IP地址,您就不必在DHCP服务器决定分配新IP地址时更改任何配置。

例如,在您的客户端配置中......

<client>
  <endpoint address="http://dendei:8732/VenatoWCFconsole/End"
    binding="basicHttpBinding" bindingConfiguration="sameBindingConfigYouAlreadyUse"
    contract="Whatever.YourContractNameIs" name="YourEndpointName" />
</client>

更新:我刚发现上面的服务配置存在问题。在服务端点配置中,您应该将地址指定为将附加到基址的URI的附加部分。因此,您只需要address="http://localhost:8732/End"而不是address="End"

答案 2 :(得分:0)

据我了解你没有静态IP地址并尝试通过拥有一个静态DNS名称来克服这个问题,在我看来这不会起作用,因为你应该有一个静态IP地址而不是为它分配一个静态DNS名称,然后尝试连接。