WCF客户端不考虑主机地址

时间:2011-12-06 14:07:44

标签: c# asp.net .net wcf visual-studio-2010

我有WCF服务的以下配置文件。配置中定义了主机。但是,当我从客户端打印服务地址时,它不知道主机。打印结果是:

  

http://localhost:3187/Service1.svc/MyFolder

为什么不考虑主机名?我们需要做些什么修改?

注意:我正在从VS 2010运行以运行服务和客户端网站。

        Service1Client myClientService = new Service1Client();
        Response.Write(myClientService.Endpoint.Address);

客户端配置(由Visual Studio自动生成)

    <client>
  <endpoint address="http://localhost:3187/Service1.svc/MyFolder"
    binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IService1"
    contract="MyWCFReference.IService1" name="WSHttpBinding_IService1">
    <identity>
      <userPrincipalName value="U16990@ustr.com" />
    </identity>
  </endpoint>
</client>

服务器端配置为:

       

<services>

  <!--MyService-->
  <service name="MyWCFServiceApplication.MyService"
           behaviorConfiguration="WeatherServiceBehavior">

    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:80/ServiceModelSamples/FreeServiceWorld"/>
      </baseAddresses>
    </host>

    <endpoint address="MyFolder"
              binding="wsHttpBinding"
              contract="MyWCFServiceApplication.IService1" />

    <endpoint address="mex"
              binding="mexHttpBinding"
              contract="IMetadataExchange" />
  </service>

</services>


  <behaviors>

  <serviceBehaviors>

    <behavior name="WeatherServiceBehavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="False"/>
    </behavior>

  </serviceBehaviors>

</behaviors>

<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

       

2 个答案:

答案 0 :(得分:2)

当通过IIS或ASP.NET开发服务器(又名 Cassini )在ASP.NET进程中托管WCF服务时,服务配置文件中的baseAddresses setting < strong>被忽略,因为服务总是可以通过SVC文件的URL 来访问。

您在客户端看到的网址是正确的:

  

http://localhost:3187/Service1.svc/MyFolder

如您所见,服务的基地址成为Web服务器上的SVC文件的URL

答案 1 :(得分:1)

您所说的是WCF客户端 - 但是,您发布的配置仅包含服务(服务器端)的配置...(<services>部分)。< / p>

我在您发布的内容中看不到任何客户端配置 - 您的配置中应该有<client>部分