终结点寻址由EndpointAddress类表示,作为EndpointAddress的一个属性,AddressHeader也参与到了终结点的寻址。
如果一个Service的Endpoint指定了header,而客户端没有指定,将会抛出EndpointNotFoundException:
服务端配置文件:
<system.serviceModel>
<services>
<service name="Wcf.CalculatorService">
<endpoint address="WcfService" binding="netTcpBinding" contract="Wcf.ICalculatorService">
<headers>
<ICalculatorService xmlns="Wcf"/>
</headers>
</endpoint>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8700/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
客户端配置文件
<system.serviceModel>
<client>
<endpoint name="CalculatorService" address="net.tcp://localhost:8700/WcfService" binding="netTcpBinding" contract="Wcf.ICalculatorService">
</endpoint>
</client>
</system.serviceModel>
解决方案是:
1、在客户端添加同样的header:
<system.serviceModel>
<client>
<endpoint name="CalculatorService" address="net.tcp://localhost:8700/WcfService" binding="netTcpBinding" contract="Wcf.ICalculatorService">
<headers>
<ICalculatorService xmlns="Wcf"/>
</headers>
</endpoint>
</client>
</system.serviceModel>
2、应用ServiceBehavior特性:
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]