我是WCF的新手,并开始使用一个简单的无文件应用程序部分(web.config),您可以在下面看到:
<serviceHostingEnvironment multipleSiteBindingsEnabled="true">
<serviceActivations>
<add
factory="System.ServiceModel.Activation.ServiceHostFactory"
relativeAddress="./RelativeAddress.svc"
service="WCF_Transactions.MyService1"/>
</serviceActivations>
</serviceHostingEnvironment>
现在我可以通过
访问服务了http://localhost:18148/RelativeAddress.svc
然后我添加下一行:
<services>
<service name="WCF_Transactions.MyService1" behaviorConfiguration="MyBehavior1">
<host>
<baseAddresses>
<add baseAddress="http://localhost:18148/" />
</baseAddresses>
</host>
<endpoint address="/RelativeAddressX.svc" binding="basicHttpBinding" contract="WCF_Transactions.IService1"></endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyBehavior1">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
所以我希望我的服务可以通过下一个地址访问:
http://localhost:18148/RelativeAddressX.svc
但我不能这样做。我误解了什么?
答案 0 :(得分:7)
MSDN http://msdn.microsoft.com/en-us/library/ms733749.aspx: *
有两种方法可以在WCF中为服务指定端点地址。 您可以为与之关联的每个端点指定绝对地址 服务或您可以提供服务主机的基地址 service,然后为与之关联的每个端点指定一个地址 此服务是相对于此基址定义的。您可以 使用这些过程中的每一个来指定a的端点地址 在配置或代码中提供服务。如果你没有指定 相对地址,服务使用基地址。
* 因此,根据您的示例,您有基本地址
http://localhost:18148/
它将与RelativeAddress.svc结合使用,作为svc文件的名称。然后它会尝试将此字符串与/RelativeAddressX.svc组合作为端点地址的一部分。所以你会有像
这样的东西 http://localhost:18148/RelativeAddress.svc/RelativeAddressX.svc.
您的端点不得在IIS中指定svc的路径。它应该只包含一个逻辑地址,与此点相关。 因此,请尝试将您的终端更改为以下内容:
<endpoint address="RelativeAddressX" binding="basicHttpBinding" contract="WCF_Transactions.IService1"></endpoint>
它应该可以通过路径访问
http://localhost:18148/RelativeAddress.svc/RelativeAddressX
答案 1 :(得分:2)
在IIS或Cassini中托管时,无需在配置文件中指定 - 基本URL由Web服务器提供。该元素在自托管时使用。 Cassini(在Web服务器中构建VS)将忽略它。
这是一个关于WCF寻址的好页面: http://msdn.microsoft.com/en-us/magazine/cc163412.aspx
以下是一些相关帖子: WCF Service Endpoints vs Host Base address WCF, changing the baseAdress of an endpoint