【发布时间】:2010-02-07 14:59:01
【问题描述】:
我们有一个使用第三方网络服务的 .net 3.5 网络应用程序。代理是通过向其 wsdl 添加 Web 引用来创建的。此代理未编译。
我们的错误日志记录出现频繁但间歇性的异常:
发生并捕获了“System.Web.Services.Protocols.SoapHeaderException”类型的异常
如果我按照 url 指向生成异常的页面,我无法重新创建它。
编辑:这是大部分例外情况 - 它是从哪里冒出来的
Message : Internal Error
Type : System.Web.Services.Protocols.SoapHeaderException, System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Source : System.Web.Services Help link :
Actor :
Code : http://schemas.xmlsoap.org/soap/envelope/:Client
Detail :
Lang :
Node :
Role :
SubCode :
Data : System.Collections.ListDictionaryInternal
TargetSite : System.Object[] ReadResponse(System.Web.Services.Protocols.SoapClientMessage, System.Net.WebResponse, System.IO.Stream, Boolean)
Stack Trace : at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at Vendor.getSearch(getSearchRequest getSearchRequest) in c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\be43c34e\b09edc7e\App_WebReferences.pww-cf-q.0.cs:line 73
编辑 2:内部异常:
我有时会记录以下内部异常:
Message : Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
Type : System.IO.IOException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Source : System
Help link :
Data : System.Collections.ListDictionaryInternal
TargetSite : Int32 Read(Byte[], Int32, Int32)
Stack Trace : at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.FixedSizeReader.ReadPacket(Byte[] buffer, Int32 offset, Int32 count)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)
at System.Net.TlsStream.CallProcessAuthentication(Object state)
at System.Threading.ExecutionContext.runTryCode(Object userData)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result)
at System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.ConnectStream.WriteHeaders(Boolean async)
和/或:
Message : An existing connection was forcibly closed by the remote host
Type : System.Net.Sockets.SocketException, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Source : System
Help link :
ErrorCode : 10054
SocketErrorCode : ConnectionReset
NativeErrorCode : 10054
Data : System.Collections.ListDictionaryInternal
TargetSite : Int32 Receive(Byte[], Int32, Int32, System.Net.Sockets.SocketFlags)
Stack Trace : at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
更新
我们仍在努力。原来是路由问题,解决了。我们仍然收到带有套接字错误的内部异常。我们今天有 MS 支持,他们查看了一些跟踪和网络捕获。 Web 服务主机执行循环 DNS,它们可能会响应来自一个 ip 的 syn syn/ack 的不同 IP 地址,以及来自不同 ip 的下一个 IP 地址。不是很好。这可能非常适合我们的情况,但也可能适用于其他人。
Microsoft 网络监视器和应用程序跟踪为我们提供了所需的信息。
【问题讨论】:
-
能否提供异常的详细信息(即异常消息)?
-
事实证明,大多数异常都是由于 dns 问题造成的……有时只是与编程无关!
-
DNS 问题的解决方案是什么?我们也有类似的问题。谢谢!
-
@Brian - 我在上面添加了更新。
标签: .net web-services asmx