【发布时间】:2013-09-14 06:35:39
【问题描述】:
以下两种情况有什么区别:
配置 1:
<service name="WcfService1.Service1" behaviorConfiguration="MyServiceTypeBehaviors">
<host>
<baseAddresses>
<add baseAddress="net.tcp://127.0.0.1:808/" />
</baseAddresses>
</host>
<endpoint address="service"
binding="netTcpBinding"
bindingConfiguration="MainBinding"
bindingName="MainBinding"
name="DefaultEndpoint"
contract="WcfService1.IService1" />
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange" />
</service>
配置 2:
<service name="WcfService1.Service1" behaviorConfiguration="MyServiceTypeBehaviors">
<host>
<baseAddresses>
<add baseAddress="net.tcp://127.0.0.1:808/service" />
</baseAddresses>
</host>
<endpoint address="net.tcp://127.0.0.1:808/service"
binding="netTcpBinding"
bindingConfiguration="MainBinding"
bindingName="MainBinding"
name="DefaultEndpoint"
contract="WcfService1.IService1" />
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange" />
</service>
我的理解是,在任何一种情况下,基地址 + 端点地址都会解析为相同的绝对地址
但为什么我在 配置 2 上收到错误:“没有端点正在监听 net.tcp://127.0.0.1:808/
但是配置1 运行服务没有任何错误!!!
编辑 1:
工作配置:
<host>
<baseAddresses>
<add baseAddress="net.tcp://127.0.0.1:808/" />
</baseAddresses>
</host>
<endpoint address="service"
binding="netTcpBinding"
bindingConfiguration="MainBinding"
bindingName="MainBinding"
name="DefaultEndpoint"
contract="WcfService1.IService1" />
非工作配置:
<host>
<!--
<baseAddresses>
<add baseAddress="" />
</baseAddresses>
-->
</host>
<endpoint address="net.tcp://127.0.0.1:808/service"
binding="netTcpBinding"
bindingConfiguration="MainBinding"
bindingName="MainBinding"
name="DefaultEndpoint"
contract="WcfService1.IService1" />
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange" />
在这种情况下,我删除了基地址并提供了完整的服务地址(没有 .svc 路径),但收到了套接字超时错误。在这种情况下有什么问题?未定义基地址时,端点地址是否总是需要带有 .svc 的完整地址?如果是这样,背后的原因可能是什么?
【问题讨论】:
-
尝试删除配置2中的主机元素
-
@sine,我没有收到任何错误,只是想了解我为什么会出现这种行为。
-
如何托管此 WCF 服务?如果您使用 IIS 来托管它,那么您的基地址实际上就是您的
*.svc文件的位置,而您在此配置中拥有的任何内容都没有实际意义 -
@marc_s 是的,我在 IIS 上托管了我的服务
标签: c# .net wcf configuration