Welcome

首页 / 软件开发 / WCF / COM(VB/VBA/Script)利用服务标记调用WCF服务之四:使用配置文件

COM(VB/VBA/Script)利用服务标记调用WCF服务之四:使用配置文件2011-10-26 博客园 LazyBee这几天友人同学说他在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) );}}}