当我的WCF服务中有许多端点时......
为他们重复使用相同的端口号是明智的还是可能的。
问题是当部署服务时,有太多的端口号需要记住所使用的不同绑定。
答案 0 :(得分:5)
这当然是可能的,我也会说明智 - 特别是如果你将它作为端口80上的Web服务托管,但即使是TCP也是如此。每个服务都有一个端口对我来说似乎有点过分。
虽然每个绑定都需要一个端口(因此选择一个用于TCP的端口,一个用于HTTP等)。
您可以为您的服务指定相同的根地址(这是JSON REST服务,但绑定无关紧要) - 请注意地址属性:
<system.serviceModel>
<services>
<service name="Demo.SampleService2Implementation">
<endpoint address="http://localhost:85/sample2"
behaviorConfiguration="json"
binding="webHttpBinding"
name="jsonEndpoint2"
contract="Demo.ISampleService2" />
</service>
<service name="Demo.SampleServiceImplementation">
<endpoint address="http://localhost:85/sample1"
behaviorConfiguration="json"
binding="webHttpBinding"
name="jsonEndpoint1"
contract="Demo.ISampleService" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="json">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
这是客户端配置:
<system.serviceModel>
<client>
<endpoint name="SampleServiceEndpoint"
address="http://localhost:85/sample1"
binding="webHttpBinding"
contract="Demo.ISampleService"
behaviorConfiguration="json">
</endpoint>
<endpoint name="SampleServiceEndpoint2"
address="http://localhost:85/sample2"
binding="webHttpBinding"
contract="Demo.ISampleService2"
behaviorConfiguration="json">
</endpoint>
</client>
<behaviors>
<endpointBehaviors>
<behavior name="json">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
答案 1 :(得分:1)
如果一个服务中有多个端点,可能具有不同的合同或绑定,那么您可以使用基址来使用相对寻址,如下所示。
<services>
<service name="CalculatorService">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/CalculatorService"/>
<add baseAddress="net.tcp://localhost:8001/CalculatorService"/>
</baseAddresses>
</host>
<endpoint address="Mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<endpoint address="Basic" binding="basicHttpBinding" contract="IBasicCalculator" />
<endpoint address="Scientific" binding="netTcpBinding" contract="IScientificCalculator" />
</service>
</services>