【问题标题】:The relative address of a WCF service endpoint when base address already supplied已提供基地址时 WCF 服务终结点的相对地址
【发布时间】:2011-12-07 05:10:26
【问题描述】:

我也在学习 WCF,并且是 Web 服务的新手,并且有一个非常基本的问题。请纵容我!我正在使用的书中的示例(Learning WCF)创建了一个 ServiceHost 实例,指定了服务的基地址(new Uri("http://localhost:8000/HelloIndigo)),我猜这是类的位置实现服务的库。然后调用 AddServiceEndpoint() 使用最后一个参数,相对地址,给出为“HelloIndigoService”。后者只不过是类的名称(可以在库中找到) ) 实际实现了服务合同?(有问题的类确实有这个名字。)然而,这个论点被称为“地址”,这让我非常困惑。请帮忙。

【问题讨论】:

    标签: wcf service endpoints


    【解决方案1】:

    如果您是自托管,则可以:

    • 完整、明确的端点地址,例如

      http://yourServer:8888/YourService/SomeMethodName
      

      所以你的端点定义了一个完整的 HTTP 地址

    或者:

    • 您可以在服务上定义一个基地址,它是该服务所有端点的基础,然后端点本身只定义从那里开始的相对地址。

    因此,在您的情况下,基地址是 http://localhost:8000/HelloIndigo - 因此所有服务端点都将位于该地址“下方”。

    端点定义了HelloIndigoService相对地址,所以把这两个放在一起,最后的完整地址是:

      http://localhost:8000/HelloIndigo/HelloIndigoService
    

    这仅适用于自托管(当您有一个创建ServiceHost 类并打开它以供使用的主机应用程序时)。

    当您使用 IIS 托管您的服务时,不使用/不解释基地址 - 相反,您的 *.svc 文件所在的虚拟目录(在 IIS 中)定义了您的服务端点的地址。

    【讨论】:

    • 谢谢你的回答,马克。我猜你已经部分回答了我的问题。听起来你的答案是“是”。在本书的示例中,我们是自托管的。包含该服务的类库是 HelloIndigo.dll,它包含一个名为 HelloIndigoService 的类和一个方法 HelloIndigo()。所以我猜当它把完整地址放在一起时,你上面列出的同一个,它不需要更深入地挖掘类文件,因为类只包含一个方法?附加“/HelloIndigo”来指定方法名称是否有效?
    猜你喜欢
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2011-10-19
    • 2012-08-09
    • 2011-01-02
    • 2011-07-01
    • 2013-03-18
    相关资源
    最近更新 更多