2011-01-14 16 views
0

私は通常、リスト項目を更新するために私がアクセスするSharePointファーム上のlists.asmxにアクセスしています。 Lists.asmxは、昼間はクライアントを完全に認証しますが、夜間は失敗します(システム保守のため)。クライアントがサービスに接続しようとしているのを確実にしたい(1時間まで)。ここで何を提案したいですか?私たちはここに何かを用意していますか、クライアント側で独自のコードを書く必要がありますか?クライアント側で自分の再試行コードを書く必要がある場合、クラスのデザインはどのように見えますか?_vti_bin Lists.asmx; Webサービスへのログイン試行が初めて失敗した場合はどうなりますか?

答えて

2

解決策の解決策は、Webサービスの​​の値です。 Try/Catchブロックを使用してサーバー側のSharePoint Webサービスエラーを処理し、2回目の試行後にユーザーにエラーを警告または通知します。たとえば、表示名からList GUIDを取得する関数がある場合は、VBで使用します。 。 。

Dim ws As New SPLists.Lists() 
    Try 
     ws.Credentials = GetCredentials() 
     ws.Timeout = 60000 '1 minute timout 
     doc = XDocument.Parse(ws.GetListCollection().OuterXml) 
     SPGetListID = (From x In doc.Elements.First.Elements _ 
         Where x.Attribute("Title").Value.Equals(ListName) _ 
         Select x.Attribute("ID").Value).FirstOrDefault 
    Catch timeout As TimeoutException 
     ws.Abort() 
    Catch other As Exception 
     ws.Abort() 'or use a timing loop to call this function again 
    End Try 

。 。 。要求のタイムアウトが要求をキャンセルします。あなたのケースでWebサービスが別のエラーを返す場合は、Catch Otherセクションで処理できます。

ws.Timeoutの値を3600000に設定するだけではなく、Webサーバーが時間切れになる前にタイムアウトを強制するように設定されている可能性が高いからです。代わりに、Catchブロック(またはこの関数を呼び出すコード)でタイミングループを使用し、設定した間隔でWebサービス呼び出しを再度行うことができます。そのコード内では、無限ループを避けるためにwebserviceルーチンへの呼び出し回数を制限する必要があります。

+0

ほとんどの場合、Webサービスがエラーをスローしています。私はエラーが検出されたときにループすることをお勧めします(私はToadmysterに同意します、最大数の再試行が必要です)。 –

関連する問題