【问题标题】:WCF wsHttpBinding and BasicHttpBinding in same WCF Service Application同一 WCF 服务应用程序中的 WCF wsHttpBinding 和 BasicHttpBinding
【发布时间】:2009-08-24 03:10:35
【问题描述】:

有人告诉我,wsHttpBinding 不支持仍需要使用旧版本 SOAP 的旧客户端。我想在同一个 WCF 服务应用程序中添加一个 BasicHttpBinding 端点,以便客户端可以根据他们正在运行的技术使用任一端点。我对每个人使用的地址感到困惑。默认的 wsHttpBinding 没有设置地址。 BasicHttpBinding 端点的地址应该是什么? wsHttpBinding 的地址不应该是(例如)http://localhost/WcfService1/Service1.svc 吗?

【问题讨论】:

    标签: wcf


    【解决方案1】:

    这里需要考虑两件事:

    • 如果您在 IIS(或作为 IIS7 的一部分的 WAS)中托管,则不能设置基地址 - 您的服务的基地址将是 MyService.svc 文件所在的虚拟目录。不过,您仍然可以设置相对地址

    • 如果您自托管,您通常会在配置中添加基地址,这样您就不必一直拼写整个地址(但您可以 - 如果您愿意的话)。

    因此,如果您在 localhost 机器上的一个名为 MyApp 的虚拟目录中拥有您的 MyService.svc,然后使用此配置:

    <service name="MyService" behaviorConfiguration="Default">
        <endpoint 
            address="wsHttp"  
            binding="wsHttpBinding" 
            contract="IMyService" />
      <endpoint 
            address="basic" 
            binding="basicHttpBinding" 
            contract="IMyService" />
    </service>
    

    那么您的“旧式”basicHttp 服务将可以在以下位置访问:

    http://localhost/MyApp/MyService.svc/basic
    

    您的新 wsHttp 驱动服务将可在以下位置访问:

    http://localhost/MyApp/MyService.svc/wsHttp
    

    您可以为这些相对地址(.../MyApp/MyService.svc 之后的任何名称)命名任何您喜欢的名称 - 只需确保它们彼此不同即可。

    在 IIS 中托管 --> *.svc 文件的位置(虚拟目录)成为您的基地址。

    如果您在控制台应用程序或 Windows NT 服务中自行托管您的服务,您可以自己设置您的基地址:

    <services>
      <service name="MyService" behaviorConfiguration="Default">
        <host>
          <baseAddresses>
             <add baseAddress="http://localhost:8185/Services/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    

    现在,在这种情况下,您的“旧式”basicHttp 服务可以在以下位置访问:

    http://localhost:8185/Services/basic
    

    您的新 wsHttp 驱动服务将可在以下位置访问:

    http://localhost:8185/Services/wsHttp
    

    您可以为每个传输定义一个基地址,例如一个用于 http://,一个用于 net.tcp://,以此类推。

    当然,如果您确实需要,您还可以在 &lt;endpoint&gt; 元素中为每个服务端点定义完整地址 - 这为您提供了完全的灵活性(但仅适用于自托管场景)。

    马克

    【讨论】:

    • 是否可以让你的 wsHttp 端点指向根目录,然后让 basicHttp 端点的地址指向 root\basic?
    【解决方案2】:

    在 WCF 中,您有一个基地址和一个端点地址,在您的情况下,您可以执行以下操作:

    <service name="WcfEndpoints.Service1" behaviorConfiguration="WcfEndpoints.Service1Behavior">
      <!-- Service Endpoints -->
      <endpoint address="new" binding="wsHttpBinding" contract="WcfEndpoints.IService1" />
      <endpoint address="old" binding="basicHttpBinding" contract="WcfEndpoints.IService1" />
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    </service>
    

    请注意,basicHttpBinding 端点需要额外的工作才能与旧 (asmx) 客户端一起使用

    http://msdn.microsoft.com/en-us/library/ms751433.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 2011-10-10
      • 2013-11-25
      • 2013-06-10
      • 2017-04-09
      相关资源
      最近更新 更多