処理が断絶する
- 題名: 処理が断絶する
- 著者: きゃびん
- 日時: 2012/03/01 19:41:24
- ID: 30022
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: 処理が断絶する
- 著者: オショウ
- 日時: 2012/03/03 11:09:03
- ID: 30024
- この記事の返信元:
-
[30022] 処理が断絶する きゃびん 2012/03/01 19:41:24
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: 処理が断絶する
- 著者: きゃびん
- 日時: 2012/03/04 18:42:35
- ID: 30032
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
VB.NET2008 を使用して、スマートクライアントシステムを開発している者です。
お客様に導入したシステムで、システム終了時に突如として処理が中断する(下記「 B 」を行う前)
事象が発生するようになり、色々と調査を行った結果、下記の「 @ 」の処理終了後から下記「 B 」
の処理を行うまでに想定以上の処理時間( 約 0.3 秒が約 15 秒掛かっている )が多々あることと、
下記の「 A 」か「 B 」の処理を行う際に、処理が断絶することが判明しました。
しかし、色々と調査を行ったのですが、開発を行っている環境では同様の事象が全く再現出来ず、また、
類似環境の他のお客様では全く問題なく動作しているので、根本解決に察し、途方に暮れている状態で
す。
スキル不足で大変申し訳ないのですが、類似する事象を解消した。こういう観点で見れば解決に至るか
も。などありましたらご教示して頂けると助かります。
あるベンダが提供しているフレームワークも使用しているので、フレームワークに関連する箇所であれ
ばフレームワーク開発元に問合せが出来るのですが、独自実装を行っている箇所なもので。。。
【ソース】
<STAThread()> _
Public Shared Sub Main(ByVal args As String())
Dim mutex As System.Threading.Mutex = Nothing
Try
'' 初期画面表示前処理 ''
''〜〜〜〜〜〜〜〜〜〜''
'初期画面を呼び出します。
ApplicationManager.applicationStart(False)
Catch ex As Exception
Throw New SystemException( _
MethodBase.GetCurrentMethod().Name, ex, "エラーメッセージID")
Finally
Try
'実行ユーザのProfile情報取得
Dim prf As Profile = CommonLogic.GetProfile()
If Not String.IsNullOrEmpty(prf.UserId) _
AndAlso Not String.IsNullOrEmpty(prf.ConnectionDatabase) _
AndAlso prf.LoginSuccess Then
@ prf.PushId("ApplicationMain")
'APサーバと通信を行う為のインスタンスを取得
A Dim execWeb As New ExecWebService()
'ログオフ
B Call execWeb.executeWebServiceDataSet("aaa", "bbb", "ccc")
Else
'' ログ出力処理 ''
''〜〜〜〜〜〜〜''
End If
Catch ex As Exception
'' ログ出力処理 ''
''〜〜〜〜〜〜〜''
End Try
'' ログアウト処理 ''
''〜〜〜〜〜〜〜''
End Try
End Sub
【@より呼ばれるソース抜粋】
Public Sub PushId(ByVal formId As String)
Try
'' ログ出力処理 ''
''〜〜〜〜〜〜〜''
Me._FormId.Push(formId)
Catch ex As Exception
Throw New SystemException( _
MethodBase.GetCurrentMethod().Name, ex, "エラーメッセージID")
Finally
'' ログ出力処理 ''
''〜〜〜〜〜〜〜''
End Try
End Sub
【Bより呼ばれるソース抜粋】
Public Overrides Function executeWebServiceDataSet(ByVal assemblyName As String _
, ByVal className As String _
, ByVal methodName As String _
) As System.Data.DataSet
'' ログ出力処理 ''
''〜〜〜〜〜〜〜''
Dim sw As New Stopwatch
Try
sw.Start()
Return MyBase.executeWebServiceDataSet( _
assemblyName, className, methodName, Me.GetParamDataset())
Catch ce As CommunicationException
If ce IsNot Nothing AndAlso _
TypeOf ce.InnerException Is ServiceModel.Security.SecurityNegotiationException Then
' 証明書エラー
Throw New SystemException(ce, "エラーメッセージID")
End If
Throw
Catch ex As Exception
Dim SqlEx As SQLException = Nothing
Dim dx As Exception = ex
For i As Integer = 0 To 100
If dx.InnerException Is Nothing Then
Exit For
End If
If TypeOf dx.InnerException Is SQLException Then
SqlEx = DirectCast(dx.InnerException, SQLException)
Exit For
End If
dx = dx.InnerException
Next
If SqlEx IsNot Nothing AndAlso SqlEx.errorCode = -2 Then
' SQL タイムアウト
'' ログ出力処理 ''
''〜〜〜〜〜〜〜''
Throw New ApplicationException(MethodBase.GetCurrentMethod.Name _
, SqlEx, SQL_TIMEOUT, New String() {"エラーメッセージ"})
End If
Throw
Finally
sw.Stop()
'' ログ出力処理 ''
''〜〜〜〜〜〜〜''
GC.Collect()
End Try
Return Nothing
End Function