所以我在IIS8(Windows Server 2012)中托管了一个WCF服务 . 这是配置文件的相关部分:

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" />
    <services>
      <service name="MovieCorner.DAL.Service.MovieCornerDalService">
        <host>
          <baseAddresses>
            <add baseAddress="http://192.168.221.101/MovieCorner/" />
          </baseAddresses>
        </host>
        <!-- Service Endpoints -->
        <endpoint address="" binding="basicHttpBinding" 
           contract="MovieCorner.Commons.Services.IMovieCornerDalService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <!-- Metadata Endpoints -->
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <endpoint kind="udpDiscoveryEndpoint" />
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" />
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True" />
          <serviceDebug includeExceptionDetailInFaults="True" />
          <serviceDiscovery />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

具有简单绑定和发现 endpoints 的简单服务 . 服务正常运行,一切正常 . 几乎...

这是我在客户端使用的代码(它只是一个“单元”测试):

var client = new DiscoveryClient(new UdpDiscoveryEndpoint());
var response = client.Find(new FindCriteria(typeof(IMovieCornerDalService)));

Assert.IsNotNull(response);
Assert.IsNotNull(response.Endpoints);
Assert.IsTrue(response.Endpoints.Count > 0);

foreach (var endpoint in response.Endpoints)
{
    Console.WriteLine("Address: {0}; Contract: {1}", endpoint.Address, endpoint.ContractTypeNames[0]);
}

代码成功找到唯一正在运行的服务 . 输出如下:

地址:http://ws12-iis8/MovieCorner/MovieCornerDalService.svc; Contract :http://tempuri.org/:IMovieCornerDalService

使用承载服务的 machine name 返回地址 . 发现后我想使用这样的服务:

var endpoint = response.Endpoints[0];
var clientProxy = ChannelFactory<IMovieCornerDalService>.CreateChannel(new BasicHttpBinding(), endpoint.Address);
var user = clientProxy.RegisterUser("1234"); // problem

实际的方法调用抛出异常,内部异常如下:System.Net.WebException:无法解析远程名称:'ws12-iis8'

"unit"测试在我的PC上运行,该服务托管在VM中 . 我可以在http://192.168.221.101/MovieCorner/MovieCornerDalService.svc地址找到该服务 . 但不是机器名称地址 .

我错过了什么?我有什么选择?如何检索托管VM的服务的实际(私有)IP?我搜索了不同的元数据选项,但我不是网络世界的专业人士,所以我不知道我在寻找什么 .

如果您需要更多信息,请告诉我们 . 谢谢你的时间!