这几天友人同学说他在COM利用服务标记调用WCF服务的时候遇到一个问题,就是他返回的的Soap消息 大于65536这个wsHttpBinding的缺省值,引发调用错误。需要将MaxReceivedMessageSize更改成可以容纳 大消息内容的值。在我前面的三篇文章中使用的都是缺省的wsHttpBinding,所以不存在这个问题。现在 需要更改缺省值自然就需要增加配置来达到目的。目前最关键的问题就是:是否能让VB/VBA/Script来使 用配置文件呢?如果可以,那如何让VB,VBA, Script来使用配置文件中定义的绑定呢?
在多方搜寻探索尝试之后,终于找到了解决方案,那就是只要将配置文件放在宿主文件的相同目录, 并且将配置文件的名称改成和宿主文件同名(包括扩展名)再加上.config之后,就可以让VB/VBA/Script 来使用配置文件中定义的绑定去调用WCF服务。如果是vbs文件(vb script),由于执行vbs文件的是 cscript.exe或者wscript.exe,缺省情况下我们系统都是使用wscript.exe来执行的,这时候你可以把配 置文件放在系统目录的system32下,名为wscript.exe.config.
如果是VBA宏的话,要看是word还是excel,或者其他。因为不同的类型其配置文件名不一样。如果是 word,那么配置文件名称应该是WINWORD.EXE.config,如果是excel,配置文件名应该是: Excel.exe.config.其他类型依次类推。
如果是VB程序的话,假如我们的程序名为test.exe,那么配置文件名称为test.exe.config.
不过需要注意的是,如果COM(VB/VBA/Script)利用服务标记调用WCF服务需要使用配置文件的话,我们 只能使用类型化契约,不能使用mex契约和WSDL契约(具体如何使用类型化契约、MEX契约、WSDL契约,请 参看我以前的文章。COM(VB/VBA/Script)利用服务标记调用WCF服务之一使用类型化契约、COM (VB/VBA/Script)利用服务标记调用WCF服务之二使用MEX契约、COM(VB/VBA/Script)利用服务标记调用WCF 服务之三使用WSDL契约),这个可能和标记字符串有关系,细心的同学可能发现,类型化标记字符串中的 binding和.net中的配置是一样的,而MEX和WSDL标记字符串中的binding是固定的。 为了更加清晰一点 ,下面就以VBS中以类型化契约服务标记调用WCF为例,由于这个系列的WCF服务端基本都相同,不过这次 由于我们为了制造返回超过65536个字符的消息所以对服务端的Service1.svc.cs文件做部分更改,更改后 的文件内容如下:using System;
using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace WCFServiceMoniker { public class Service1 : IService1 { public string SayHello(string yourwords) { return string.Format("Hello World! You entered: {0}{1}", yourwords,new string('A',65536) ); } } }
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件
, script
, vba
, exe调用
, 配置
, 标记
, 服务
, vb script
system
,以便于您获取更多的相关知识。