장애처리 한 내용인데.

Server Error '/' Application

Object reference not set to an instance of an object

Description: An unhandled exception was generated during the execution of the current web request. please review the stack trace for more information about the error and where it orginated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:

An unhandled exception was generated during the execution of the current web request.Information regarding the origin and using the exception stack trace below.

Stack Trace:

[NullReferenceException: Object reference not set to an instance of an object.]

Microsoft.office.server.Administration.UserProfileApplicationProxy.get_ApplicationProperties() +134

Microsoft.office.server.Administration.UserProfileApplicationProxy.get_PartitionIDs() +44

Microsoft.office.server.Administration.UserProfileApplicationProxy.IsAvailable(SPServiceContext ServiceContext) +134

Microsoft.office.server.WebControls.MyLinksRibbon.get_Portal Available() +44

Microsoft.office.server.WebControls.MyLinksRibbon.EnsureMySiteUrls() +60

Microsoft.office.server.WebControls.MyLinksRibbon.get_PortalMySiteUrlAvailable()+15

Microsoft.office.server.WebControls.MyLinksRibbon.OnLoad(EventArgs e) +91

System.Web.UI.Control.LoadRecursive()+65

System.Web.UI.Control.LoadRecursive()+190

System.Web.UI.Control.Page.ProcessRequestMail(Boolean includeStagesBeforeAsyncpoint, Boolean includeStagesAfterAsyncpoint) +2427

 

스택은 이런 식으로 뜰 것이고..

보면 알겠지만 UserProfile 쪽에 문제가 있는 것이다. (왜인지는 모르겠다)

이때, 서비스에 다음 서비스 2개가 시작되어있지 않으면, 유저 프로필 서비스를 아예 배제하고 만들지 않는 한 거의 프로필 문제라고 봐야한다.

 

일단 내가 한 해결방법은. User Profile Service를 중지하였다가 다시 실행시킨 것이다.

 

 이렇게 하니까 앞절의 그 서비스 2개가 시간이 지나서 실행이 되고, 문제가 해결되었다.

 뭐..

 

 그렇다고 -_-ㅋㅋ

 

 

페이지에서 게시를 눌렀는데. 에러가 나더라. (Unexpected.. 어쩌구 하는 짜증나는 에러)

그래서 한번 체크해보았다. 

뭐? -_-; 활성화 되어있는데 저거? 

됐잖아!

 

있잖아!!!

 

정신을 차리고 생각을 해보니, 이 문제의 배경은 내가 저 'SharePoint Server 게시' 활성화를 껐다켰다 했다는 것.

그러니까 뭐가 문제냐면. 활성화를 시켰는데도 불구하고, 정확하게 게시했다는 값이 들어가있지 않았다는것이다.

아니 뭐 제품이 이래 -_-;;

저... 활성화 시켰는데요? -_- 왜 이러세요?

 

그래서. 구글에서 이거 True로 시키는 방법이 있나 없나 조회해보고, 다음과 같은 솔루션을 얻었다.

http://sharepoint.stackexchange.com/questions/1662/publishing-spweb-properties-missing-why-how

 

Power Shell 을 켜고

[System.Reflection.Assembly]::LoadWithPartialName("System.Web") | Out-Null 
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") | Out-Null 
$Site1
= New-Object Microsoft.SharePoint.SPSite("http://니 사이트 이름") 
$Web1
= $Site1.OpenWeb() 
$Web1
.AllProperties["__PublishingFeatureActivated"]="True" 
$Web1
.Update() 
 

그러니까 True로 되더라

 

역시 외국인 아저씨들은 머리가 좋다.

이러니까 게시도 잘 되고, 페이지도 잘 만들어지더라.

 

아 그리고, 돌아다니다가 하나 더 안건데. 이 경우 True인데도 안되면 속성 하나를 더 확인해보라고 한다.

 

이 __PagesListId 값이 없을 수도 있고, 엉뚱한 값이 들어가있을 수가 있다고 한다.

Pages 라이브러리를 정확하게 지정해야 하니, Id값 확인하고 Shell을 이용하고 업데이트를 해주자.

 


 http://support.microsoft.com/kb/2483447 에 보면, 명시적으로 못을 박고 있네요.
 (구성원인 유저가 특정 확장자를 가진 파일을 업로드하려고 하면, 아마 Access Denied 라는 창이 뜰 것이다. swf 파일 못올린다)

 -_-;
 참나. 어쩌라고.


 올릴 수 없는 확장자는 다음과 같습니다.

 < ascx, asmx, aspx, jar, master, swf, xap, xsf, xsn >

 딱 보기에, 뭔가 있어보이는 파일들 같긴 합니다. 
 그럼 뭐... 지워야죠.

 파워쉘을 '관리자 권한'으로 실행시켜서 (어드민으로 로그인되어있다면 필요없겠죠) 다음을 입력합니다.
 
 PS c:\> $sa = Get-SPWebApplication - Identity "(어플리케이션 명)"
 
 PS c:\> $sa.WebFileExtensions
ascx
asmx
aspx
jar
master
swf
xap
xsf
xsn        (이러면 이게 죽 나와요 어떤 것들이 막혀있는지)

PS c:\> $sa.WebFileExtensions.Remove("swf")
True       (실행이 되고)

PS c:\> $sa.Update()                      (업데이트)


이렇게 해주시면 됩니다.

주의 : 제 경우입니다. 여러분의 케이스와 다를수도 있음을 알려드립니다.


프로젝트 중에 이런 메세지가 뜬 적이 있어요.

분명히 SPSite에 제대로 된 Url을 추가했는데, Null로.. Url이 없다는 다소 황당한 메세지였습니다.
이럴때는 일단 분석을 해봐야 할 필요가 있습니다. 분명히 Url이 틀렸다던지. 하는 문제는 아니었거든요.

일단 eventvwr로 봅니다.


일반적으로, Sharepoint 2010 을 설치했을 때, API가 사용하는 계정은 sntd\administrator입니다.
그리고 이 계정의 결정은, 전적으로 Pool의 결정에 따릅니다.

즉, 이 웹 응용프로그램에서 기본적으로 사용하는 Pool인, DefaultAppPool의 계정이 무엇이냐에 따라 달라지는 것이지요.
Url이 없는것이 아니라, 그 SPSite의 데이터를 읽어오기 위한 DB에 접근하지 못했다는 이야기입니다.

그럼 해결방법은 2가지가 되겠지요. DefaultAppPool의 프로세스 ID를 바꿔주던지.
아니면 SQL Server에 이 잡혀있는 프로세스 ID의 계정을 추가해 주던지.

두가지 방법 중 하나를 취해주시면 해결됩니다.

DefaultAppPool 프로세스 ID를 보시면,


지금 이 화면은, 인터넷 정보 관리자(inetmgr)에서 DefaultAppPool의 고급설정창을 켠 결과입니다.

기본적으로, 프로세스 모델 ID를 지정하는 곳이 되겠습니다. 기본 웹 크리덴셜과는 별도로 들어가는 프로세스 아이디죠.
즉, SPSite 등의 Sharepoint API가, 저 계정을 가지고 들어간다고 생각하시면 됩니다.
일반적으로 (도메인계정)\Administrator로.. 설정을 하시고 설치를 하셨을 것입니다.
즉, 이 계정이 SQL Server에 있는 계정인지를 확인해보시면 됩니다.

그러니까, 이 계정을 sntd\Administrator 로 바꾸셔도 해결이 될 것이고,


SQL Management Studio 안에 이 (도메인계정)\gwUser를 추가해도 무방하겠습니다.
당연한 말이겠지만.. SNTD\administrator가 저기 있기 때문에 프로세스 ID에 SNTD\administrator가 되는 것이며,
gwUser와 SNTD\gwUser는 다른 계정입니다.

혹시 이 이외의 케이스가 있다면 답글 부탁드리겠습니다.

수고하세요 ^^