代码之家  ›  专栏  ›  技术社区  ›  kay.one

IIS下的多个终结点

  •  4
  • kay.one  · 技术社区  · 16 年前

    我一直试图在iis托管的服务中添加一个新的端点,但在过去一天左右的时间里都没有找到。

    这是我的理解:

    • 在IIS下可以有多个终结点,只要它们有唯一的地址。
    • 您可以分配一个基址,但它将被IIS中的虚拟目录设置覆盖。

    我的虚拟目录是 http://localhost/WcfCert/

    <services>
      <service name="WcfCertServer.Service1" behaviorConfiguration="WcfCertServer.Service1Behavior">
        <endpoint address="" binding="wsHttpBinding" contract="WcfCertServer.IService1"/>
        <endpoint address="test" binding="wsHttpBinding" contract="WcfCertServer.IService1"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    

    我可以用 http://localhost/wcfcert/service1.svc

    但是 http://localhost/wcfcert/test/service1.svc/test 在IE或客户端应用程序中不返回任何内容

    我错过了什么?

    编辑:

    所以我做了进一步的测试,这里是我发现的。

    如果启动wcftestclient.exe并添加 http://localhost:1523/Service1.svc http://localhost:1523/Service1.svc/mex 它将在该地址下添加两个端点。所以我的问题是 http://localhost:1523/service1.svc 只代表第一个端点?为什么添加那个地址会同时出现两个端点?

    但如果我试着加上 http://localhost:1523/Service1.svc/test 我得到

    错误:无法从中获取元数据 http://localhost:1523/service1.svc/test 如果这是您可以访问的Windows(R)通信基础服务,请检查您是否已在指定地址启用元数据发布。有关启用元数据发布的帮助,请参阅位于 http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata 交换错误uri: http://localhost:1523/service1.svc/test 元数据包含无法解析的引用:' http://localhost:1523/service1.svc/test '. Sendera:BadContextToken 无法处理邮件。这很可能是因为 http://schemas.xmlsoap.org/ws/2004/09/transfer/Get '不正确,或者因为消息包含无效或过期的安全上下文标记,或者因为绑定之间不匹配。如果服务由于不活动而中止通道,则安全上下文标记将无效。要防止服务过早中止空闲会话,请增加服务端点绑定上的接收超时。http get error uri: http://localhost:1523/service1.svc/test 下载时出错' http://localhost:1523/service1.svc/test '.请求失败,HTTP状态为400:请求错误。

    2 回复  |  直到 12 年前
        1
  •  2
  •   jrista    16 年前

    实际上是:

    http://localhost/wcfcert/service1.svc/test

    如果你想网址是' http://localhost/wcfcert/test/service1.svc ,则需要在address属性中指定完整的url。

        2
  •  0
  •   MrUpsideDown    12 年前

    我最近遇到了一个类似的问题,我相信原因是wcftestclient需要mex端点来查询它正在测试的服务的元数据。

    当您添加服务地址时 "http://localhost:1523/Service1.svc" 对于wcftestclient,它实际上查询端点 "http://localhost:1523/Service1.svc/mex" 获取服务描述。

    错误“无法从中获取元数据” "http://localhost:1523/Service1.svc/test" 显示,因为wcftestclient正在查找“/test/mex”终结点以获取位于“/test”的服务的元数据。

    要解决此问题,您需要添加另一个端点,以提供有关托管在地址“/test”处的服务的元数据:

    <endpoint address="/test/mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    

    这是对我有效的解决方案。