WCF,更改端点的baseAdress

时间:2009-05-26 07:14:49

标签: c# .net wcf .net-3.5

我对以下配置文件有几个问题:

<system.serviceModel>
  <bindings />
  <services>
    <service behaviorConfiguration="WcfReporting.Service1Behavior"
             name="WcfReporting.Service1">
      <endpoint address="" 
                binding="basicHttpBinding" bindingConfiguration=""
                contract="WcfReporting.IService1">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
      <endpoint address="mex" binding="mexHttpBinding" 
                contract="IMetadataExchange" />
      <host>
        <baseAddresses>
          <add baseAddress="net.tcp://localhost:5050/" />
        </baseAddresses>
      </host>
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="WcfReporting.Service1Behavior" >
        <!-- To avoid disclosing metadata information, set the value below to false 
             and remove the metadata endpoint above before deployment -->
        <serviceMetadata httpGetEnabled="true"/>
        <!-- To receive exception details in faults for debugging purposes, 
             set the value below to true. Set to false before deployment to 
             avoid disclosing exception information -->
        <serviceDebug includeExceptionDetailInFaults="false"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>
  1. 为什么当我点击F5重启服务时,服务以此URL http://localhost:2752/开始...为什么不是我在baseAddresses中指定的5050。

  2. 如何添加其他端点。我尝试使用endpoint address =“/ Address2”binding =“basicHttpBinding”contract =“WcfReporting.IService1”/&gt;

  3. 我应该如何才能访问该服务,不仅是http://localhost/VirtualDir/,还有http://localhost/VirtualDir/address2或者它是如何运作的?

3 个答案:

答案 0 :(得分:3)

如果您在Visual Studio 2005或更高版本中托管Cassini,则可以使用Project / Properties / Web / Use Visual Studio Development Server / Specific Port指定端口。

默认情况下,端口将自动分配 - 这对Web服务没有多大帮助,因为您的客户可能希望使用固定的URL。

您无需指定&lt; baseAddresses&gt;在IIS或Cassini中托管时的配置文件中 - 基本URL由Web服务器提供。 &lt; baseAddresses&gt;元素在自托管时使用。

答案 1 :(得分:1)

  

如何添加其他端点?一世   尝试使用端点   地址=“/地址2”   结合= “basicHttpBinding的”   contract =“WcfReporting.IService1”/&gt;

您在此端点中指定的地址需要是本地和相对的 - 例如只需指定

<endpoint address="Address2"
          binding="basicHttpBinding"
          contract="WcfReporting.IService1" />

这将在

的完整地址处创建一个端点
net.tcp://localhost:5050/Address2

但正如Darin已经指出的那样 - 如果您使用IIS / WAS来托管您的服务,则* .svc文件所在的虚拟目录将优先,并且将忽略指定的基址。为了真正使用基地址,您需要在控制台应用程序或Windows服务中自行托管服务。

马克

答案 2 :(得分:0)

如果您使用Web服务器(例如Cassini或IIS)来托管您的WCF服务,则将从此服务器提供基本地址。另请注意,您无法通过HTTP使用TCP绑定。如果您希望能够设置基地址属性,则需要自己托管服务(例如,在NT服务,控制台或Windows应用程序中)。