我有一个WCF服务,暴露了大约34种方法。直到今天,使用MetadataExchangeClient
进行元数据交换工作正常,但突然间我开始遇到以下异常:
元数据包含无法解析的引用:http://localhost:1150/service.svc?wsdl=wsdl0
最“有趣”的事情是,如果我在服务合同中注释掉一些方法(无论哪个),那么服务就会公开 less 方法我可以恰到好处地获取元数据。 web.config
设置为
<system.serviceModel>
<services>
<service name="(...)" serviceBehavior="(...)">
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="(...)"><serviceMetadata httpGetEnabled="True"></behavior>
<serviceBehaviors>
</behaviors>
所有名称都是名称空间限定的,一切都运行良好,同时暴露15种方法。每当我试图暴露更多,无论哪个,我得到那个例外。我究竟做错了什么?
答案 0 :(得分:1)
我敢打赌,添加的方法会使邮件大小大于默认的最大值。您是否有内部异常说“已超出传入邮件的最大邮件大小限额(65536)”?
如果是这样,请增加你的mex绑定的MaxReceivedMessageSize:
<services>
<service>
<endpoint contract="IMetadataExchange" binding="wsHttpBinding" bindingConfiguration="mexBinding" address="mex" />
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="mexBinding" maxReceivedMessageSize="5000000">
<security mode="None"/>
</binding>
</wsHttpBinding>
</bindings>
请注意,端点绑定不是标准的“mexHttpBinding”。我正在complete example上发布的http://www.dasblonde.net进行复制。