我们有一个 WCF SOAP 服务,巨大的单体构建了一个大约 430kb 的 WSDL。直到最近,服务合同还是服务类
[ServiceContract]
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
[ServiceKnownType("GetKnownTypes", typeof(KnownTypesHelper))]
public class FunctionalityProviderService : IServiceBehavior
{
...
}
但我们想扩展服务以拥有一些 GET 端点来测试服务健康状况。为此,我提取了一个这样的界面:
[ServiceContract(Name = "FunctionalityProviderService"]
public class IFunctionalityProviderService
{
...
}
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
[ServiceKnownType("GetKnownTypes", typeof(KnownTypesHelper))]
public class FunctionalityProviderService : IServiceBehavior, IFunctionalityProviderService
{
...
}
并更新了 web.config 以匹配。
<service behaviorConfiguration="CustomServiceBehavior" name="MyProject.FunctionalityProviderService">
<endpoint address="" binding="customBinding" contract="MyProject.IFunctionalityProviderService" bindingConfiguration="BinaryHttpBinding" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
此服务是通过 .svc 文件托管的 IIS,因此无需更改。
完成此操作并导航到 /FunctionalityProviderService.svc?singleWsdl 后,wsdl 的大小降至 230kb。看起来现在缺少一大堆类型定义。
我尝试查看 KnownTypesHelper 是否正在 svc.?singleWsdl 负载上执行,但我从未得到断点。我不知道下一步该往哪里看。缺少哪些类和存在哪些类似乎没有押韵或原因。我试图尽可能多地分享这个,但项目和依赖关系相当深远。