我们有一个直到最近才运行良好的网络服务。
在本地调用时,一切正常,但远程调用时需要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
谢谢
修改
在将网络服务与另一个网络服务进行比较后,我终于找到了问题的根源:这是跟踪本身。一旦被禁用,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>