DOBON.NET DOBON.NETプログラミング掲示板過去ログ

処理が断絶する

  • 題名: 処理が断絶する
  • 著者: きゃびん
  • 日時: 2012/03/01 19:41:24
  • ID: 30022
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[WindowsXPSP3、VB.NET2008、.NET Framework3.5SP1]
分類:[.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
> の処理を行うまでに想定以上の処理時間( 約 0.3 秒が約 15 秒掛かっている )が多々あることと、

  社内?環境では、0.3秒程度で、客先環境では、15秒かかる
  と言うことですか?

  ExecWebService() ではどういう挙動をするのでしょうか?
  おそらくWebServiceと連携する部分でのネットワーク遅延と
  WebServiceが稼働するサーバー(PC)側の負荷との関係で
  そのような時間差が発生しているのだと思いますが・・・

  再度、その辺の調査を行われては?

※ 私もWebSerice使ったシステムを構築したことがありました
  が、常に0.3秒程度で応答があれば問題無かったのですが、
  遅延時間が甚だしく、使用を断念し、違う方式に変更した
  事がありました。

以上。
  • 題名: Re[2]: 処理が断絶する
  • 著者: きゃびん
  • 日時: 2012/03/04 18:42:35
  • ID: 30032
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
オショウさん。ご教示の程、有難う御座います。
ネットワーク遅延とサーバ負荷の観点で、再度、調査を行ってみます。

DOBON.NET | プログラミング道 | プログラミング掲示板