2009-04-23 4 views
0

보다 구체적으로 - [SoapDocumentMethod (OneWay = true)]으로 웹 서비스에서 SPContext를 참조하는 방법은 무엇입니까?WSS 기능에서 장기 실행 작업 호출 OnActivated 이벤트

사이트를 만들 때 작업을 실행해야하는 기능을 만듭니다. 작업을 완료하는 데 약 4 분이 소요됩니다. 그래서 우리는이 기능이 활성화되었을 때 호출 할 수있는 웹 서비스를 만들었습니다. 이것은 작동하지만 비동기 적으로 실행되기를 원합니다. 우리는 SoapDocumentMethod의 OneWay 속성을 찾았습니다. 그것은 훌륭하게 작동하지만 SPContext는 이제 NULL입니다.

우리 웹 서비스는 _vti_bin 가상 디렉터리에 있으므로 각 Windows SharePoint Services 사이트에서 사용할 수 있습니다. SPContext.Current.Web을 사용하여 사이트를 가져오고 장기 실행 작업을 수행했습니다. 나는 단지 비누 응 답을 즉시 돌려 보내고 프로세스가 실행되도록함으로써 화재에 대해 잊고 싶었습니다.

어떻게하면 현재 SPContext를 얻을 수 있습니까? 내 웹 서비스에 속성을 적용 나는 [(편도 = TRUE) SoapDocumentMethod]을 때

SPWeb mySite = SPContext.Current.Web; 

내가 같은 컨텍스트를받을 수 : 내 웹 서비스에서이 작업을 수행 할 수 있도록 사용?

또는 URL에서 SPWeb을 다시 만들어야합니까?

이이 스레드 유사합니다 webservice oneway and new SPSite(myUrl)


업데이트 : 나는이 두 가지 방법을 시도했습니다하지만 그들은 작동하지 않았다 :

SPWeb targetSite = SPControl.GetContextWeb(this.Context); 

SPWeb targetSite2 = SPContext.GetContext(this.Context).Web; 
+0

그래서 우리는 oneway 속성을 제거하고 동 기적으로 호출하고 있습니다. 사이트 생성은이 시점에서 시간 초과가되지 않는 것처럼 보이지만 더 이상 실행하기 위해 추가해야 할 것들이 있으므로 비동기식으로 호출하는 것이 이상적입니다. Windows Sharepoing Services 사이트 정의의 OnActivated 이벤트에서 장기 실행 작업을 시작하기위한 아이디어 나 모범 사례가 있습니까? 웹 서비스가 갈 방법입니까 아니면 타이머 작업을 조사하거나 다른 스레드를 시작해야합니까? – dirq

+0

참고 : OneWay 특성을 사용하여 웹 서비스를 호출 할 때 정적 Current 속성 (HttpContext.Current)을 사용하여 HttpContext에 액세스 할 필요가 없습니다. HttpContext에 액세스하려면 WebService에서 XML 웹 서비스 메서드를 구현하는 클래스를 파생시키고 대신 Context 속성 (this.Context)에 액세스합니다. 단방향 메서드에는 반환 값 또는 out 매개 변수를 사용할 수 없습니다. – dirq

답변

0

편도 방법을 가질 수 없습니다 반환 값 또는 임의의 매개 변수

하지만 그들은 동등한 가치가 있습니다. ameters 돈? 그들은? 당신은 웹 서비스 메서드 호출을 수행 할 때

, 당신은 featurereceiver에서 현재 사이트의 URL을 전달하고 이 (SPSite 사이트 = 새로운 SPSite (urlPassedAsParameter)) 웹에서 를 사용 할 수 없습니다 서비스 방법?

FeatureActivated 재정의의 SPFeatureReceiverProperties에는 현재 SPWeb 또는 SPSite가 SPFeatureReceiverProperties.Parent로 있습니다.

관련 문제