Здравствуйте, TK, Вы писали:
TK>Что-то где-то лочится. Запусти оба процесса под отладчиком (Галку Enable Unmanaged Debugging тоже стоит отметить) и когда все зависнет — нажми Break и посмотри стек каждого потока — можно будет определить что, где и на чем конкретно виснет.
Вот вершушка стека вызовов на клиенте в момент зависания:
00000000()
system.dll!System.Net.Sockets.Socket.Receive(buffer, offset, size, socketFlags) + 0x8e bytes
system.runtime.remoting.dll!System.Runtime.Remoting.Channels.SocketStream.Read(buffer = {Length=4096}, offset = 0, size = 4096) + 0x30 bytes
system.runtime.remoting.dll!System.Runtime.Remoting.Channels.SocketHandler.ReadFromSocket(buffer = {Length=4096}, offset = 0, count = 4096) + 0x28 bytes
system.runtime.remoting.dll!System.Runtime.Remoting.Channels.SocketHandler.BufferMoreData() + 0x1f bytes
system.runtime.remoting.dll!System.Runtime.Remoting.Channels.SocketHandler.Read(buffer = {Length=4}, offset = 0, count = 4) + 0x9c bytes
system.runtime.remoting.dll!System.Runtime.Remoting.Channels.SocketHandler.ReadAndMatchFourBytes(buffer = {Length=4}) + 0x25 bytes
system.runtime.remoting.dll!System.Runtime.Remoting.Channels.Tcp.TcpSocketHandler.ReadAndMatchPreamble() + 0x18 bytes
system.runtime.remoting.dll!System.Runtime.Remoting.Channels.Tcp.TcpSocketHandler.ReadVersionAndOperation(operation = 0) + 0x1d bytes
system.runtime.remoting.dll!System.Runtime.Remoting.Channels.Tcp.TcpClientSocketHandler.ReadHeaders() + 0x32 bytes
system.runtime.remoting.dll!System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage(msg = {System.Runtime.Remoting.Messaging.Message}, requestHeaders = {System.Runtime.Remoting.Channels.BaseTransportHeaders}, requestStream = {System.Runtime.Remoting.Channels.ChunkedMemoryStream}, responseHeaders = <undefined value>, responseStream = <undefined value>) + 0x35 bytes
system.runtime.remoting.dll!System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(msg = {System.Runtime.Remoting.Messaging.Message}) + 0x83 bytes
mscorlib.dll!System.Runtime.Remoting.Proxies.RemotingProxy.CallProcessMessage(ms, reqMsg, proxySinks, currentThread, currentContext, bSkippingContextChain) + 0x62 bytes
mscorlib.dll!System.Runtime.Remoting.Proxies.RemotingProxy.InternalInvoke(reqMcmMsg, useDispatchMessage, callType) + 0x28d bytes
mscorlib.dll!System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(reqMsg) + 0x113 bytes
mscorlib.dll!System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(msgData, type) + 0x288 bytes
> XLClient.exe!TP.RemotingXL.XLForm.buttonServerFill_Click(sender = {System.Windows.Forms.Button}, e = {System.EventArgs}) + 0x56 bytes
...
Вот верхушка стека сервера в функции FillXL до момента конвертации object к Excel.Application:
xlserver.dll!TP.RemotingXL.XLServer.FillXL(xlObj = {System.Runtime.Remoting.Proxies.__TransparentProxy}) + 0x15 bytes C#
mscorwks.dll!791d94bc()
mscorwks.dll!793419bb()
mscorwks.dll!791d7b2f()
mscorwks.dll!79341689()
mscorwks.dll!79341697()
mscorwks.dll!79341bf2()
mscorwks.dll!791d60e1()
mscorlib.dll!79ba39f8()
> mscorlib.dll!System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(msg, methodPtr, fExecuteInContext) + 0x30b bytes
mscorlib.dll!System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(msg) + 0x9 bytes
mscorlib.dll!System.Runtime.Remoting.Messaging.ServerObjectTerminatorSink.SyncProcessMessage(reqMsg) + 0x12c bytes
mscorlib.dll!System.Runtime.Remoting.Lifetime.LeaseSink.SyncProcessMessage(msg) + 0x25 bytes
mscorlib.dll!System.Runtime.Remoting.Messaging.ServerContextTerminatorSink.SyncProcessMessage(reqMsg) + 0x1b3 bytes
mscorlib.dll!System.Runtime.Remoting.Channels.CrossContextChannel.SyncProcessMessage(reqMsg) + 0x209 bytes
mscorlib.dll!System.Runtime.Remoting.Channels.ChannelServices.DispatchMessage(sinkStack, msg, replyMsg) + 0x22c bytes
mscorlib.dll!System.Runtime.Remoting.Channels.DispatchChannelSink.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, responseMsg, responseHeaders, responseStream) + 0x31 bytes
...
После подвисания на в стеке серверного процесса только стек запуска ф-ции Main().
Я не очень в этом секу, но судя по стеку на сервере проблема с синхронизацией процессов. Я прав или нет? Если да, то как это лечить?