Как сделать большие службы WCF со многими функциями импортируемыми в VS 2010?

У меня есть большой класс со многими функциями, представленными как служба WCF, которая также имеет конец mex. Теперь, когда я пытаюсь добавить ссылку на эту службу в Visual Studio 2010, я получаю следующую ошибку:

ошибка MEX

Есть ли что-нибудь, что я могу сделать, кроме сокращения количества методов, чтобы эта ошибка исчезла?

Вот код, который я использую для конечной точки mex:

        // Check to see if the service host already has a ServiceMetadataBehavior
        ServiceMetadataBehavior smb = svh.Description.Behaviors.Find<ServiceMetadataBehavior>();
        // If not, add one
        if (smb == null)
            smb = new ServiceMetadataBehavior();
        //smb.HttpGetEnabled = true;
        smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
        svh.Description.Behaviors.Add(smb);

        // Add MEX endpoint
        svh.AddServiceEndpoint(
          ServiceMetadataBehavior.MexContractName,
          MetadataExchangeBindings.CreateMexTcpBinding(),
          location+"/mex"
        );

person Arsen Zahray    schedule 12.02.2012    source источник


Ответы (1)


Вы можете переопределить это с помощью атрибута maxNameTableCharCount в узле readerQuota в файле конфигурации.

Вот документ ‹readerQuote›: http://msdn.microsoft.com/en-us/library/ms731325.aspx

Это пример автоматически сгенерированной конфигурации на стороне клиента. Значение по умолчанию — 16384.

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="YOUR_NAME" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
          maxBufferSize="268438456" maxBufferPoolSize="524288" maxReceivedMessageSize="268438456"
          messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
          useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="Transport">
            <transport clientCredentialType="Basic" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="YOUR_ADDRESS" binding="basicHttpBinding"
        bindingConfiguration="YOUR_ENDPOINT" contract="YOUR_CONTRACT"
        name="YOUR_NAME" />
    </client>
  </system.serviceModel>
person Timeout    schedule 12.02.2012
comment
это серверная часть? можете ли вы предоставить пример кода о том, как это сделать? - person Arsen Zahray; 13.02.2012
comment
см. обновление для кода конечной точки MEX. Я посмотрел на клиентский app.config, и он действительно содержит узел readerQuotas, но не имеет атрибутов maxNameTableCharCount. - person Arsen Zahray; 13.02.2012
comment
это тот, который я использую ‹readerQuotas maxDepth=2147483647 maxStringContentLength=2147483647 maxArrayLength=2147483647 maxBytesPerRead=2147483647 maxNameTableCharCount=2147483647 /›, все еще получаю сообщение об ошибке, и сервис не НАСТОЛЬКО большой - person Arsen Zahray; 13.02.2012
comment
Добавлен пример @ArsenZahray. В этом конкретном примере используется basicHttpBinding, поэтому при необходимости измените его. - person Timeout; 13.02.2012