locked
webサービス(soap)からタイマージョブ起動が出来ない RRS feed

  • 質問

  • WSS3.0で、タイマージョブを起動する側をweb(.aspx)からwebサービス(.asmx)に変更したところ、updateにおいて以下のエラーとなりました。webサービスからは起動出来ないという制限があるのでしょうか?


    ■起動要求コード
    SPJobDefinition job = new SPJobDefinition(jobname, webApplication, null, lockType);
    job.Title = JobName;
    job.Schedule = new SPOneTimeSchedule(DateTime.Now);
    job.Update();
    (SPJobDefinitionは実際には継承したものを使用)

    ■Job.Update()でのエラー内容
    Exception message: オブジェクトの現在の状態に問題があるため、操作は有効ではありません。. Exception stack trace:
    場所 Microsoft.SharePoint.WebControls.SPControl.SPWebEnsureSPControl(HttpContext context)
    場所 Microsoft.SharePoint.WebControls.SPControl.GetContextWeb(HttpContext context)
    場所Microsoft.SharePoint.Utilities.SPUtility.ValidateFormDigest()
    場所 Microsoft.SharePoint.Administration.SPPersistedObject.Update()
    場所 Microsoft.SharePoint.Administration.SPJobDefinition.Update()
    [以下省略]



    • 編集済み 松本_ 2012年1月26日 1:09
    2012年1月24日 4:32

回答

  • 外しているかもしれませんが、Updateを呼ぶ前に、この一文を入れてみてください。

    HttpContext.Current.Items["FormDigestValidated"] = true;

     

     

    • 回答としてマーク 松本_ 2012年2月2日 10:27
    2012年1月26日 13:32

すべての返信

  • 外しているかもしれませんが、Updateを呼ぶ前に、この一文を入れてみてください。

    HttpContext.Current.Items["FormDigestValidated"] = true;

     

     

    • 回答としてマーク 松本_ 2012年2月2日 10:27
    2012年1月26日 13:32
  • ありがとうございました。

    update()の直前に

     HttpContext.Current.Items["FormDigestValidated"] = true;

    を入れたら正しくジョブを起動できました。

    "FormDigestValidated"は、「FormDigest検証は済んでいるよ。もうやらなくて良いよ」 と騙すものなのでしょうか。MSDNを見ても記述がありません。また、Web Serviceの場合のFormDigestとは何なんでしょうね。色々と疑問が湧きます。検索すると英文しか引っかからないので調査はあきらめました。

    2012年2月2日 10:26
  • 私が書いた記述は、ご指摘の通り、SharePointのセキュリティ検証を
    騙す書き方なので、使うには注意が必要です。

    セキュリティ検証だけについてなら、
    http://msdn.microsoft.com/ja-jp/library/ms472879.aspx
    に説明があります。

    また、英語ページではありますが、
    http://hristopavlov.wordpress.com/2008/05/21/what-you-need-to-know-about-allowunsafeupdates-part-2/
    のページがわかりやすいです。

    この辺りは、SharePointの開発には必須の知識だと思うので、もっと日本語の情報が増えてほしいですね。

     

    2012年2月3日 16:50