Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
同一WCF服务应用程序中的WCF wsHttpBinding和BasicHttpBinding_Wcf - Fatal编程技术网

同一WCF服务应用程序中的WCF wsHttpBinding和BasicHttpBinding

同一WCF服务应用程序中的WCF wsHttpBinding和BasicHttpBinding,wcf,Wcf,我被告知wsHttpBinding不支持仍然需要使用旧版本SOAP的旧客户端。我想在同一个WCF服务应用程序中添加一个BasicHttpBinding端点,以便客户端可以根据其运行的技术使用任一端点。我不知道他们每个人的地址是什么。默认wsHttpBinding没有地址集。BasicHttpBinding端点的地址应该是什么?wsHttpBinding的地址不应该是(以我为例)?在WCF中,您有一个基址和一个enpoint地址,在您的情况下,您可以这样做: <service name="W

我被告知wsHttpBinding不支持仍然需要使用旧版本SOAP的旧客户端。我想在同一个WCF服务应用程序中添加一个BasicHttpBinding端点,以便客户端可以根据其运行的技术使用任一端点。我不知道他们每个人的地址是什么。默认wsHttpBinding没有地址集。BasicHttpBinding端点的地址应该是什么?wsHttpBinding的地址不应该是(以我为例)?

在WCF中,您有一个基址和一个enpoint地址,在您的情况下,您可以这样做:

<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)客户端


这里有两件事需要考虑:< /P>

  • 如果您在IIS中托管(或作为IIS7的一部分),则无法设置基址-您的服务的基址将是
    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>
您的新wsHttp驱动服务将可在以下位置访问:

http://localhost/MyApp/MyService.svc/basic
http://localhost/MyApp/MyService.svc/wsHttp
http://localhost:8185/Services/basic
http://localhost:8185/Services/wsHttp
您可以随意命名这些相对地址(在
../MyApp/MyService.svc
之后的任何名称),只要确保它们彼此不同即可

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

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

<services>
  <service name="MyService" behaviorConfiguration="Default">
    <host>
      <baseAddresses>
         <add baseAddress="http://localhost:8185/Services/" />
      </baseAddresses>
    </host>
  </service>
</services>
您的新wsHttp驱动服务将可在以下位置访问:

http://localhost/MyApp/MyService.svc/basic
http://localhost/MyApp/MyService.svc/wsHttp
http://localhost:8185/Services/basic
http://localhost:8185/Services/wsHttp
您可以为每个传输定义一个基址,例如,一个用于http://,一个用于net.tcp://等等

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


Marc

是否可以让您的wsHttp端点指向根目录,然后让basicHttp端点的地址指向root\basic?