我们有一个网络服务,直到最近它都运行良好。
在本地调用时,一切正常,但在远程调用时,最多需要 30 秒才能获得响应。不仅适用于 webmethod 调用,还适用于对 asmx 或 wsdl 的普通调用。
跟踪显示从 GetHandler 的返回和对 ProcessRequest 的调用之间的差距。您对当时可能导致问题的原因有任何想法吗(仅适用于远程调用)?
以下是服务日志的摘录,显示了从浏览器访问 .asmx 时的时间间隔:
System.Web.Services.Asmx Information: 0 : Return from IHttpHandlerFactory.GetHandler
Caller: System.Web.Services.Protocols.WebServiceHandlerFactory#23522948::GetHandler()
ProcessId=6420
LogicalOperationStack=
ThreadId=7
DateTime=2013-09-23T14:35:36.3381748Z
Timestamp=3850992018156
System.Web.Services.Asmx Information: 0 : Calling IHttpHandler.ProcessRequest
Caller: System.Web.Services.Protocols.SyncSessionlessHandler#41622463::ProcessRequest()
Request Host Address: **.**.**.**
Request Host Name: ***
Request Url: [GET] http://***/***.asmx
ProcessId=6420
LogicalOperationStack=
ThreadId=7
DateTime=2013-09-23T14:35:48.3970521Z
Timestamp=3851164660296
System.Web.Services.Asmx Information: 0 : Calling Void Documentation()
Method: System.Web.Services.Protocols.DocumentationServerProtocol#31364015::Documentation()
Caller: System.Web.Services.Protocols.SyncSessionlessHandler#41622463::Invoke()
ProcessId=6420
LogicalOperationStack=
ThreadId=7
DateTime=2013-09-23T14:35:48.3970521Z
Timestamp=3851164663918
谢谢
编辑
在将 web 服务与另一个我们进行比较后,我终于找到了问题的根源:它是跟踪本身。一旦禁用evrything远程工作正常。
我知道跟踪需要时间,但 30 秒似乎很多,为什么仅远程调用需要更多时间?正如评论中解释的那样,没有设置身份验证,并且池用户具有足够的权限,因为实际上已写入跟踪。有任何想法吗 ?
这是跟踪设置
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.Web.Services.Asmx">
<listeners>
<add name="AsmxTraceFile" type="System.Diagnostics.TextWriterTraceListener" initializeData="c:\local.log" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId" />
</listeners>
</source>
</sources>
<switches>
<add name="System.Web.Services.Asmx" value="Verbose" />
</switches>
</system.diagnostics>