从excel调用WCF服务时,收到的邮件大小出现错误

从excel调用WCF服务时,收到的邮件大小出现错误,wcf,excel,maxreceivedmessagesize,moniker,vba,Wcf,Excel,Maxreceivedmessagesize,Moniker,Vba,我使用名字对象字符串从excel VBA代码调用WCF服务。但是,由于我的服务返回大数据作为响应,excel会给出错误消息 “已超过传入邮件(65534)的最大邮件大小配额。若要增加配额,请在相应的绑定元素上使用MaxReceivedMessageSize属性” 以下是名字对象字符串: addrToService = "service4:mexAddress=""net.tcp://localhost/MyApp/API/Excel/ExcelAPIService.svc/mexTCP"", "

我使用名字对象字符串从excel VBA代码调用WCF服务。但是,由于我的服务返回大数据作为响应,excel会给出错误消息

“已超过传入邮件(65534)的最大邮件大小配额。若要增加配额,请在相应的绑定元素上使用MaxReceivedMessageSize属性”

以下是名字对象字符串:

addrToService = "service4:mexAddress=""net.tcp://localhost/MyApp/API/Excel/ExcelAPIService.svc/mexTCP"", "
addrToService = addrToService + "address=""net.tcp://localhost/PruCapWebCMHost/API/Excel/ExcelAPIService.svc"", "
addrToService = addrToService + "contract=""IExcelAPIService"", contractNamespace=""http://Prucap/Services"", "
addrToService = addrToService + "binding=""NetTcpBinding_IExcelAPIService"", bindingNamespace=""http://MyApp/Services"""
为了解决这个问题,我增加了WCF服务的web.config文件的大小,如下所示:

<netTcpBinding>
    <binding name="NetTcpBinding_IPublicService" maxBufferPoolSize="8388608"  maxBufferSize="8388608" maxReceivedMessageSize="8388608" portSharingEnabled="true">
    </binding>
</netTcpBinding>

<basicHttpBinding>
    <binding name="BasicHttpBidning_IPublicService" closeTimeout="00:05:00" openTimeout="00:05:00" sendTimeout="00:05:00" receiveTimeout="00:05:00" maxReceivedMessageSize="8388608" />
    <binding name="BasicHttpBidning_ISecureService" closeTimeout="00:05:00" openTimeout="00:05:00" sendTimeout="00:05:00" receiveTimeout="00:05:00" maxReceivedMessageSize="8388608" />
</basicHttpBinding>

....

  <service name="ExcelAPIService" behaviorConfiguration="PublicServiceTypeBehaviors">
    <endpoint address="" bindingNamespace="http://MyApp/Services" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IPublicService" contract="API.Service.ExcelAPI.IExcelAPIService" name="NetTcpBinding_IExcelAPIService" />
    <endpoint address="" bindingNamespace="http://MyApp/Services" binding="basicHttpBinding" bindingConfiguration="BasicHttpBidning_IPublicService" contract="API.Service.ExcelAPI.IExcelAPIService" name="BasicHttpBidning_IExcelAPIService" />
    <endpoint address="mex" bindingNamespace="http://MyApp/Services" binding="mexHttpBinding" contract="IMetadataExchange" />
    <endpoint address="mexTCP" bindingNamespace="http://MyApp/Services" binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange" />
  </service>

....
根据关于这个话题的各种论坛,上述解决方案应该是可行的。但在我的例子中,当从excel调用时,这不起作用。是否需要从excel端执行任何操作来设置maxReceivedMessageSize?如果是,那么如何使用VBA代码执行此操作

其他信息:


我使用Office 2010(带VBA)、Windows 7 Prof、64位操作系统,您应该设置maxReceivedMessageSize=“2147483647”以增加邮件大小

尝试增加邮件大小,如:

 <binding maxBufferSize="2147483647" 
             maxBufferPoolSize="2147483647" 
             maxReceivedMessageSize="2147483647">
        <readerQuotas maxDepth="2147483647" 
                      maxStringContentLength="2147483647" 
                      maxArrayLength="2147483647" 
                      maxBytesPerRead="2147483647"
                      maxNameTableCharCount="2147483647" />

   </binding>

--或


提及


更新

您还可以通过编程方式更改端点/服务行为

参考链接:


更新2:

对不起,Anil,之前我完全忽略了你在excel中做这件事

对于您的场景来说,从VB6使用WCF服务的最简单方法是为服务客户端创建.Net COM对象包装器。然后在VB6中,您所要做的就是创建一个对象并对该对象调用一些方法。所有WCF工作都在.Net com对象中进行

只需在单独的项目中为服务创建WCF客户端,如本中所述。将.NET程序集注册为类型库,然后从VB6应用程序链接该类型库:

资料来源:


希望有帮助。:)

最大大小必须由客户端和服务器设置。但是,您正在使用的服务名字对象表单不支持指定此参数。 根据第一手经验,我可以告诉你们,使用名字一开始似乎很吸引人,因为它允许你们用最少的编码从VBA调用服务,但它的功能非常有限。我发现,毫无疑问,您也在进行编辑,实现这一点的最佳方法是构建一个合适的WCF客户端(可能是在.NET中),并从VBA调用客户端类,甚至直接调用Excel。
如果您正在尝试,但仍然有问题,请启动一个新线程,以便发布代码,并更全面地解释您尝试了什么,以及问题是什么。

Pranav-我更改了您提到的大小,仍然会出现相同的错误。帖子说,它应该在客户端和服务器端进行更改。我如何在客户端更改它,在我的例子中是excel?您可以通过编程也可以更改端点/服务行为。我正在更新answer.Pranav-我正在使用Excel作为我的客户端,它将VB6作为代码隐藏。这些链接讨论的是vb.net版本,我相信代码不能在vb6中工作。谢谢@Pranav。我会试试看。由于这种方法涉及到程序集的注册,因此我首先需要征得客户的许可。因为他对在他们的安全环境中安装任何东西都非常严格,而且这个excel的用户数量是多个的。你只需要将程序集添加到GAC中,这样它就被认为是安全的。无论如何,请参考前两个msdn链接,这可能在某种程度上有所帮助。您使用名字对象字符串而不仅仅是通常的ChannelFactory机制的具体原因是什么?为了节省额外的编码工作量,请稍后解释,因为您试图解决此问题似乎是在浪费编码工作。如果在客户端上使用ChannelFactory,则可以使用配置文件并设置我看到的最大大小。。我将尝试在Excel VB代码中使用ChannelFactory,并检查这是否适合我。谢谢我会让你知道的。我试图在我的VBA(Office 2010)中使用channelfactory代码,它在以下行中给出了错误“预期的行尾”:Dim myEndpoint As New EndpointAddress(“http://.....")
<basicHttpBinding>
      <binding name="BasicHttpBinding_IManagementService" closeTimeout="00:01:00"
        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
        maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
        useDefaultWebProxy="true">
        <readerQuotas maxDepth="128" maxStringContentLength="2147483647"
          maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
        <security mode="None">
          <transport clientCredentialType="None" proxyCredentialType="None"
            realm="" />
          <message clientCredentialType="UserName" algorithmSuite="Default" />
        </security>
      </binding>
    </basicHttpBinding>