具有多个服务和合同的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"
的相同方法。有什么想法可以引起这种情况吗?
我认为问题是因为它们都有相同的地址。服务器如何区分您的意图是呼叫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复制到两个不同的文件中。