我有一个包含多个服务的.NET服务器端项目。每个服务都处理每组自己的方法,但方法共享相同的类型:
当我访问Customer.svc?WSDL和Order.svc?WSDL时,每个人都引用自己的XSD文件,并在这两个文件中定义了地址类型。
因此,如果外部客户端引用两个端点,他将获得两个包含相同类型的不同XSD文件。
问题:如何强制WCF 在WSDL之间共享类型/ XSD (在服务器端!)。请注意,我不是在询问如何在客户端上共享类型(这可以通过svcutil / reference switch实现)。
答案 0 :(得分:1)
控制此方法的唯一方法是手工制作“元数据”(WSDL + XSD),然后通过自定义配置公开它。您必须确保外部化公共XSD,然后从Customer和Order wsdl文件中正确引用它们(基于您计划相对于WSDL的位置发布它们的位置)。
查看serviceMetadata文档,尤其是externalMetadataLocation属性。下面的示例向您展示了它的要点(您可以尝试使用和不使用externalMedatadataLocation属性的绝对URL,并查看它是如何工作的):
<serviceBehaviors>
<behavior name="CustomMetadata">
<serviceMetadata httpGetEnabled="true" externalMetadataLocation="https://.../mywsdl.wsdl"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
根据您的特定部署(自托管,IIS,Windows服务等),您可能遇到应该能够通过其他行为解决的各种问题。搜索“自定义wsdl WCF”或“externalMetadataLocation示例外部XSD”以查看人们遇到的其他问题,并筛选它们,因为它们可能适用于您的特定方案。