具有多个服务和合同的WCF站点

本文关键字:合同 WCF 站点 服务 | 更新日期: 2023-09-27 18:25:28

我在尝试在同一站点上托管两个服务时遇到问题。它们具有相同的基本uri,但服务名称不同,并且每个服务都有自己的契约。

在我的VS环境(IIS 7.5)中进行测试时,一切都很好。但是,当我部署到服务器(IIS 8.5)时,由于某种原因,两个uri都显示了相同的wsdl。第二次服务的合同似乎被忽视了。

有两个不同的.svc文件,代码隐藏。(为了保护无辜者,所有的名字都被更改了。)

站点:

https://mysite/services/Service1.svc

https://mysite/services/Service2.svc

这是我的配置:

<services>      
  <service name="Service1" behaviorConfiguration="DefaultBehavior">
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="DefaultBinding" contract="Namespace.IService1"/>
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>        
  </service>
   <service name="Service2" behaviorConfiguration="DefaultBehavior">
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="DefaultBinding" contract="Namespace.IService2"/>
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>        
  </service>
</services> 
<bindings>
    <wsHttpBinding>
        <binding name="DefaultBinding" receiveTimeout="00:05:00" 
                sendTimeout="00:05:00" bypassProxyOnLocal="false" transactionFlow="false" 
                hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" 
                maxReceivedMessageSize="2147483647" messageEncoding="Mtom" 
                textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
              <readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
              <reliableSession ordered="true" inactivityTimeout="00:5:00" enabled="false"/>
              <security mode="Transport">
                <transport clientCredentialType="None" />
              </security>
        </binding>
    <wsHttpBinding>
<bindings>
<serviceBehaviors>
    <behavior name="DefaultBehavior">
    <serviceMetadata httpsGetEnabled="true"  httpsGetBindingConfiguration="true" />
      <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true" />
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
      <serviceThrottling maxConcurrentCalls="160" maxConcurrentInstances="160" maxConcurrentSessions="100" /> 
    </behavior>
</serviceBehaviors>

问题是,这两个站点都反映了相同的WSDL,即contract="Namespace.IService1"的相同方法。有什么想法可以引起这种情况吗?

具有多个服务和合同的WCF站点

我认为问题是因为它们都有相同的地址。服务器如何区分您的意图是呼叫Service1还是Service2

在保持相同的基本URI的同时,尝试更改其地址

不幸的是,WCF并没有一个很好的方法来处理这个用例。在同一个端点上不能有两个合同

Service1 的终结点地址

<endpoint address="" binding="wsHttpBinding" bindingConfiguration="DefaultBinding" contract="Namespace.IService1"/>

地址必须与Service2 的地址不同

    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="DefaultBinding" contract="Namespace.IService2"/>

事实证明这是一个愚蠢的错误,一个xcopy错误。我的新附加服务的xcopy脚本是从原始服务复制粘贴的,但我忘记将.svc源重命名为新的服务名称。因此,它将相同的.svc复制到两个不同的文件中。