我被告知wsHttpBinding不支持仍需要使用旧版SOAP的旧客户端。我想在同一个WCF服务应用程序中添加一个BasicHttpBinding端点,以便客户端可以使用任一端点,具体取决于它们正在运行的技术。我对每个人使用的地址感到困惑。默认的wsHttpBinding没有设置地址。 BasicHttpBinding端点的地址应该是什么?不应该是wsHttpBinding的地址(对于我的例子)http://localhost/WcfService1/Service1.svc?
答案 0 :(得分:17)
这里需要考虑两件事:
如果您在IIS(或WAS作为IIS7的一部分)中托管,则无法设置基址 - 您的服务的基地址将是MyService.svc
文件所在的虚拟目录。您仍然可以设置相对地址,但
如果你是自托管的,你通常会在配置中添加基地址,这样你就可以不必一直拼出整个地址(但你可以 - 如果你愿意的话)。
因此,如果您在MyService.svc
计算机上的MyApp
虚拟目录中有localhost
,请使用此配置:
<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中托管 - &gt; * .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://等等。
当然,如果您真的必须,您还可以在每个服务端点的<endpoint>
元素中定义完整的地址 - 这为您提供了全面的灵活性(但仅适用于自托管方案)。
马克
答案 1 :(得分: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)客户端