我是WCF的初学者,我写了一个简单的例子,我的应用程序的app.config文件如下:
主机:
<services>
<service name="WCFService.Service.CalculatorService" behaviorConfiguration="calculatorBehavior">
<host>
<baseAddresses>
<add baseAddress="http://10.1.9.210:8080/GeneralCalculator"/>
</baseAddresses>
</host>
<endpoint address="" binding ="basicHttpBinding" contract="WCFService.Contract.ICalculator"></endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="calculatorBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
</behavior>
</serviceBehaviors>
</behaviors>
客户端:
<client>
<endpoint address="http://10.1.9.210:8080/GeneralCalculator/CalculatorService" binding ="basicHttpBinding" contract="WCFService.Contract.ICalculator" />
</client>
当我运行我的应用程序时,有一个例外: “由于EndpointDispatcher上的AddressFilter不匹配,无法在接收方处理带有'http://10.1.9.210:8080/GeneralCalculator/CalculatorService'的消息。检查发送方和接收方的EndpointAddresses是否一致。”
我猜我的配置文件有问题,请给我一些提示,
谢谢:)
答案 0 :(得分:1)
请改为尝试:
<services>
<service name="WCFService.Service.CalculatorService" behaviorConfiguration="calculatorBehavior">
<host>
<baseAddresses>
<add baseAddress="http://10.1.9.210:8080/GeneralCalculator"/>
</baseAddresses>
</host>
<endpoint address="CalculatorService" binding ="basicHttpBinding" contract="WCFService.Contract.ICalculator"></endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="calculatorBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
</behavior>
</serviceBehaviors>
</behaviors>
答案 1 :(得分:1)
您的客户尝试连接到:
http://10.1.9.210:8080/GeneralCalculator/CalculatorService
,而您的服务器在以下位置公开服务:
http://10.1.9.210:8080/GeneralCalculator
这两个需要匹配! : - )
因此,您可以使用Rodrigo的答案并将相对address="CalculatorService"
添加到服务器的端点,或者您可以将客户端的端点更改为指向服务器现在公开的URL。
马克
答案 2 :(得分:0)
看起来客户端正试图点击以“CalculatorService”结尾的Uri,而该服务在Uri上没有这个后缀?更改客户端上的地址以匹配服务的地址。