3

我是 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

但我不能这样做。我误解了什么?

4

2 回答 2

7

MSDN http://msdn.microsoft.com/en-us/library/ms733749.aspx:* _

有两种方法可以在 WCF 中为服务指定终结点地址。您可以为与服务关联的每个端点指定绝对地址,也可以为服务的 ServiceHost 提供基地址,然后为与此服务关联的每个端点指定一个地址,该地址是相对于该基地址定义的。您可以使用这些过程中的每一个在配置或代码中指定服务的端点地址。如果不指定相对地址,则服务使用基地址。

*所以根据你的例子你有基本地址

 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
于 2013-02-13T09:28:27.383 回答
2

在 IIS 或 Cassini 中托管时,您无需在配置文件中指定 - 基本 URL 由 Web 服务器提供。自托管时使用该元素。Cassini (VS build in web-server) 会忽略它。

这是一个关于 WCF 寻址的好页面:http: //msdn.microsoft.com/en-us/magazine/cc163412.aspx

以下是一些相关帖子: WCF Service Endpoints vs Host Base address WCF, changed the baseAdress of an endpoint

于 2013-02-13T09:04:31.943 回答