我有一个使用基本 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()