1

我有一个 WCF 服务公开了一些 34 方法。直到今天,元数据交换使用MetadataExchangeClient工作得很好,但突然我开始收到以下异常:

元数据包含无法解析的引用:http://localhost:1150/service.svc?wsdl=wsdl0

最“有趣”的一点是,如果我在服务合同中注释掉一些方法(无论是哪一个),从而使服务暴露的方法更少,我就能恰到好处地获取元数据。设置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 个方法时一切正常。每当我尝试公开更多内容时,无论是哪一个,我都会得到那个例外。我究竟做错了什么?

4

1 回答 1

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”。我正在复制发布在http://www.dasblonde.net上的完整示例

于 2011-09-01T15:27:40.450 回答