문제

SharePoint에서 WCF 서비스를 만들고 배포했으며 JQuery를 사용하여 요청을 보내고 있습니다.하위 사이트를 제외하고는 모든 것이 잘 작동합니다.

다음 두 가지 서비스 URL이 있다고 가정해 보겠습니다.

 - http://localhost:1111/_vti_bin...../MethodName
 - http://localhost:1111/subsite/_vti_bin...../MethodName  

이 두 URL을 사용하면 SPContext.Current.Site 동일하고 정확합니다.
하지만 SPContext.Current.Web 틀린 것은 똑같습니다.두 번째 URL을 사용하면 SPWeb 개체는 루트 웹이 아닌 하위 웹이어야 합니다.

하위 사이트를 어떻게 얻을 수 있나요? SPWeb 물체?항상 웹 URL을 WCF 메서드에 매개 변수로 전달해야 합니까?

도움이 되었습니까?

해결책

검색한 결과 다음과 같은 결론을 내렸습니다. SPContext.Current.Web 항상 반환합니다 RootWeb 그래서 특정 하위 웹의 URL이 필요합니다.

SPWeb 개체가 필요한 모든 WCF 메서드에 SPWeb URL을 전달하지 않으려면 다음을 수행할 수 있습니다.

ASP.NET 호환 모드에서 WCF 서비스를 실행 중이므로 다음을 사용할 수 있습니다. HttpContext 객체를 사용하면 됩니다. HttpContext.Current.Request.RawUrl.이 속성은 도메인 이름 뒤의 URL 문자열에 있는 모든 항목을 반환합니다.그런 다음 이 문자열을 잘라 하위 웹 상대 URL을 가져와서 OpenWeb() 방법.

예:

클라이언트 측에서 JQuery AJAX 호출의 URL 인수는 다음과 같습니다.

 http://localhost:1111/subsite/_vti_bin...../MethodName

내가 사용하는 경우 서버 측에서 HttpContext.Current.Request.RawUrl 나는 얻다:

/subsite/_vti_bin...../MethodName

그런 다음 이 문자열을 자른 후 /subsite ~로 OpenWeb() 방법.

다른 아이디어도 높이 평가됩니다.

다른 팁

나도 같은 경우가 있었다.하지만 저는 여기에서 URL을 가져왔습니다.

Uri requestUri = System.ServiceModel.OperationContext.Current.RequestContext.RequestMessage.Headers.To;

그래서 SPSite 개체를 만들 수 있었습니다.

using (SPSite site = new SPSite(requestUri.Scheme + "://" + requestUri.Host)
{ 
    //your code
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top