Press "Enter" to skip to content

Как да убиете WSS v3 сървер с прост Site Definition и без никакъв код..

Регистриране на Event Receiver за Content Type в Feature с XmlDocument… всичко звучи като по учебник, до момента в който не се усетите, че сте забравили NamespaceURI.

В документацията на XmlDocument пише следното:

NamespaceURI

Optional Text. Specifies the URI to the schema namespace for the contents of this XmlDocument element.

 

Ами не е точно optional… Ако този Feature е дефиниран за активиране от Site Definition, и се пробвате да създадете сайт на база на Site Definition-a, получават се много интересни забележителности: CPU на 100%, SQL поглъща всичката памет (не че имам много…)и всички услуги са неизползваеми. User interface-а не показва нищо друго, освен екрана за чакане, а през това време зад сцената става армагедон.

Ето и малко CAML:

  <ContentType ID=”0x0101006BD6DAD38F7947799A6F2EE72F5C3C11″

             Name=”Test Content Type”

             Group=”Custom Content Types” Version=”0″>

    <FieldRefs>

      <FieldRef ID=”{fa564e0f-0c70-4ab9-b863-0177e6ddd247}” Name=”Title” />

    </FieldRefs>

    <XmlDocuments>

      <XmlDocument>

        <spe:Receivers xmlns:spe=”http://schemas.microsoft.com/sharepoint/events”>

          <Receiver>

            <Name>UniqueNamingEventReceiver</Name>

            <Type>ItemUpdated</Type>

            <SequenceNumber>10000</SequenceNumber>

            <Assembly>SUGBG.Website.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=205b31e1c60edcc4</Assembly>

            <Class>SUGBG.Website.UniqueNameReceiver</Class>

            <Data></Data>

            <Filter></Filter>

          </Receiver>

        </spe:Receivers>

      </XmlDocument>

    </XmlDocuments>

  </ContentType>

 

И ето дефинирането в Site Definition Site Features елемента (това е в ONET.XML):

      <SiteFeatures>

        <!– Test Content Type –>

        <Feature ID=”11BFEA71-1C5E-4A24-B310-BA51C3EB7A1″ />

 

Интересно е, че същият CAML е ок ако feature-a е активиран от менюто в SharePoint.

Eто и дефиницията, която работи:

<ContentType ID=”0x0101006BD6DAD38F7947799A6F2EE72F5C3C11″

             Name=”Test Content Type”

             Group=”Custom Content Types” Version=”0″>

    <FieldRefs>

      <FieldRef ID=”{fa564e0f-0c70-4ab9-b863-0177e6ddd247}” Name=”Title” />

    </FieldRefs>

    <XmlDocuments>

      <XmlDocument NamespaceURI=”http://schemas.microsoft.com/sharepoint/events”>

        <spe:Receivers xmlns:spe=”http://schemas.microsoft.com/sharepoint/events”>

          <Receiver>

            <Name>UniqueNamingEventReceiver</Name>

            <Type>ItemUpdated</Type>

            <SequenceNumber>10000</SequenceNumber>

            <Assembly>SUGBG.Website.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=205b31e1c60edcc4</Assembly>

            <Class>SUGBG.Website.UniqueNameReceiver</Class>

            <Data></Data>

            <Filter></Filter>

          </Receiver>

        </spe:Receivers>

      </XmlDocument>

    </XmlDocuments>

  </ContentType>

 

Това не го пиша, за да създавате пакети, които могат да убият сърверите ви, а за да не си губите времето, което аз загубих в откриването на проблема.

Пуснах официален бъг към Майкрософт, ще ви разкажа ако се стигне до интересен резултат.

(за тези, които спорят, че CAML си е чист код… прави са. Заглавието лъже.)