【问题标题】:WCF Call, slow on Internal Funcions, but quick when calling functions directlyWCF 调用,内部函数慢,但直接调用函数时快
【发布时间】:2013-08-12 03:14:49
【问题描述】:

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

所以澄清一下,我并不是说要花更长的时间“结束” wcf 调用。一旦运行 WCF 背后的内部公开函数,它们在自己的处理过程中需要更长的时间来完成工作并将某些内容返回到 wcf 服务以发送给客户端,而不是直接从在我托管的 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()

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 2017-03-05
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多