具体的には - [SoapDocumentMethod(OneWay = true)]を使用してWebサービスでSPContextを参照する方法?WSS機能で長時間実行される操作を呼び出すOnActivatedイベント
サイトの作成時にジョブを実行する必要がある機能を作成しています。仕事は完了するのに約4分かかります。そこで、機能が起動されたときに呼び出すことのできるWebサービスを作成しました。これはうまくいきますが、今は非同期で実行します。私たちはSoapDocumentMethodのOneWayプロパティを見つけましたが、それはうまくいくはずですが、SPContextはNULLになりました。
私たちのWebサービスは_vti_bin仮想ディレクトリにあり、各Windows Sharepoint Servicesサイトで利用できます。 SPContext.Current.Webを使用してサイトを取得し、長時間実行される操作を実行していました。私はちょうど火をつけて、すぐに石けんの反応を返してプロセスを動かすことでそれを忘れてしまいました。
どのようにして現在のSPContextを取得できますか?私は自分のWebサービスでこれを行うことができるように使用:私は[SoapDocumentMethod(一方向=真)]を持っているとき
SPWeb mySite = SPContext.Current.Web;
は私が同じコンテキストを取得できます属性は、自分のWebサービスに適用されますか?
また、URLからSPWebを再作成する必要がありますか?
これは、このスレッドのようになります。webservice oneway and new SPSite(myUrl)
アップデート:私はこれらの二つの方法を試してみたが、彼らは動作しませんでした:
ワンウェイ方式を持つことはできませんSPWeb targetSite = SPControl.GetContextWeb(this.Context);
SPWeb targetSite2 = SPContext.GetContext(this.Context).Web;
これで、oneway属性を取り除き、それを同期的に呼び出すだけです。現時点ではサイトの作成はタイムアウトしていないようですが、追加する必要があるため、非同期に呼び出すのが理想的です。 Windows Sharepoing Servicesサイト定義のOnActivatedイベントで長期実行ジョブを開始するためのアイデアやベストプラクティスはありますか? Webサービスは、私がタイマーの仕事を研究したり、別のスレッドを蹴ったりするべきですか? – dirq
注: OneWay属性でWebサービスを呼び出すときは、静的Currentプロパティ(HttpContext.Current)を使用してHttpContextにアクセスすることはできません。 HttpContextにアクセスするには、WebServiceからXML Webサービスメソッドを実装するクラスを派生させ、代わりにContextプロパティ(this.Context)にアクセスします。 一方向メソッドには戻り値または任意の出力パラメーターを使用できません。 – dirq