【问题标题】:How to make large WCF services with many functions importable into VS 2010?如何将具有许多功能的大型 WCF 服务导入 VS 2010?
【发布时间】:2012-02-12 21:58:55
【问题描述】:

我有一个大型类,其中包含许多作为 WCF 服务公开的功能,它也有一个 mex 端点。现在,当我尝试在 Visual Studio 2010 中添加对该服务的引用时,出现以下错误:

除了减少方法计数之外,我还能做些什么来让这个错误消失?

这是我用于 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"
        );

【问题讨论】:

    标签: c# wcf visual-studio-2010 mex


    【解决方案1】:

    您可以使用配置文件中 readerQuota 节点上的 maxNameTableCharCount 属性覆盖它。

    这是 文档: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>
    

    【讨论】:

    • 这是服务器端吗?你能提供如何做到这一点的代码示例吗?
    • 查看 mex 端点代码的更新。我查看了客户端app.config,确实包含readerQuotas节点,但没有maxNameTableCharCount属性
    • 这是我正在使用的 ,仍然得到错误,服务不是那么大
    • @ArsenZahray 添加了示例。此特定示例使用 basicHttpBinding,因此请根据需要进行修改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    相关资源
    最近更新 更多