Vb.net 加快WCF客户端实例化?
假设我的WCF客户端接口名为Vb.net 加快WCF客户端实例化?,vb.net,wcf,wcf-client,channelfactory,wcf-proxy,Vb.net,Wcf,Wcf Client,Channelfactory,Wcf Proxy,假设我的WCF客户端接口名为ISDK,客户端对象本身名为ISDKClient,由svcutil生成 当我像这样实例化WCF客户端时: Dim myClient As New ISDKClient 创建第一个客户端大约需要1.5秒,然后大约需要300毫秒 如果我使用通道工厂方法: Dim myChannelFactory As New ChannelFactory(Of ISDK)(binding, endpoint) Dim myChannel As ISDK = myChannelFacto
ISDK
,客户端对象本身名为ISDKClient
,由svcutil
生成
当我像这样实例化WCF客户端时:
Dim myClient As New ISDKClient
创建第一个客户端大约需要1.5秒,然后大约需要300毫秒
如果我使用通道工厂方法:
Dim myChannelFactory As New ChannelFactory(Of ISDK)(binding, endpoint)
Dim myChannel As ISDK = myChannelFactory.CreateChannel()
第一次调用需要1.5秒,但随后对CreateChannel
的调用几乎是即时的。问题是ISDK
中的方法签名与ISDKClient
中列出的方法签名不同ISDK
具有请求/响应模式,而ISDKClient
具有带参数的常规方法
我可以控制svcuti
如何生成代理文件,以避免接口中的请求/响应方法签名模式吗,方法签名应匹配,即客户端应直接引用其接口进行所有调用(但这不是我的情况):
如果没有,是否可以使用现有通道实例化基于WCF的客户端?比如:
Dim myClient As New ISDKClient(myChannel)
如果没有,是否有其他方法可以提高在我的应用程序中实例化新WCF客户端的性能?假设所有可用的都是HTTP上的WCF服务。找出时间花在哪里。@JohnSaunders:显然是为频道创建元数据。“显然”,以及在创建频道的哪个部分?它在网络I/O上被阻止了吗?去哪里?“显然”,这是对服务的网络I/O。但是如果不是呢?@JohnSaunders:channelfactory和客户端应该使用相同的方式访问资源。唯一的区别是,该操作只执行一次。没有网络I/O从工厂创建客户端或通道。我在没有访问WCF服务的情况下进行了测试,所有内容仍然运行,数字都是一样的。如果我配置文件,它会说“不是我的代码”是花费时间的地方,特别是
clr.dll
。
Dim myClient As New ISDKClient(myChannel)