WCF调用,内部功能慢,但直接调用函数时速度很快

时间:2013-08-12 03:14:49

标签: c# .net vb.net performance wcf

我有一个自托管的WCF服务,使用基本的http绑定。我发现调用wcf服务,访问WCF公开的函数,比直接使用函数(来自wcf服务)需要更长的时间来完成(内部)。

所以要澄清一点,我不是说要花更长时间“超过”wcf电话。一旦WCF背后的内部公开函数运行,他们在自己的处理中花费更长的时间来完成他们的工作并将某些东西返回给wcf服务,以便发送到客户端,而不是直接从a访问那些相同的函数。在托管的wcf应用程序中形成。

我为所有功能添加了大量的日志记录,记录开始和停止时间,并且似乎是一致的。当通过WCF激活时,相同的功能看起来好像它们以比绕过WCF接口调用它们时要低得多的“优先级”运行。

考虑到这一点,我很确定在我使用以下内容装饰我的主要wcf类之后,由于我的UI线程锁定,我开始坚持不懈:

<ServiceBehavior(useSynchronizationContext:=False)>

是否由于上述装饰而创建了线程,以较低的优先级运行?

从WCF托管应用中的表单直接调用: 5秒

通过WCF接口呼叫: 20-30秒(不包括电线上的时间)

内部功能完成后,WCF服务本身的物理返回非常快。

一旦达到内部功能,我会做很多“工作”。

有什么想法吗?

由于

基本WCF服务代码:

        Dim myservicehost As ServiceHost
        Dim myServiceAddress As New Uri("http://" & LocalIpAddress & ":" & tcp_port & "/" & servicename)

        myservicehost = New ServiceHost(GetType(myWCFFunctions), myServiceAddress)

        ' Enable metadata publishing.

        Dim smb As New ServiceMetadataBehavior()
        smb.HttpGetEnabled = True
        smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15
        myservicehost.Description.Behaviors.Add(smb)


        myservicehost.Open()

1 个答案:

答案 0 :(得分:1)

我无法解决这个问题,并恢复了之前的实施。