reede, 30. detsember 2011

Räsitabeli kollisioonirünnak

On avastatud , et POST parameetrid, mida sirvik serverise tagasi saadab võimaldavad spetsiaalselt koostatult põhjustada (mitte ainult ASP.NET vaid ka teistes keeltes) teenustõkestusründe veebiserverile.


Paigalduspakket tuli üsna nobedalt välja, pikemalt kirjutab Scott Guthrie oma kajamis.

Samas ka hea põhjus lisaks üle kontrollida, kas veebilehel on vaja ViewState säilitada.
ViewState säilitamise saab veebilehe põhiselt maha keerata @Page direktiivi EnableViewState="false" parameetriga.
Hoiame ribalaiust kokku !!

reede, 11. november 2011

netstat -obf

Käsurealt:

netstat -obf 

Näeb midagi programeerjale arusaadavat, mis programmid ja kuhu võrku nad sul arvutist ühenduvad

netstat -obf 5

paneb iga 5 sekundi järel küsima

reede, 4. november 2011

Named Template tegemine XSL abil

Kui on XML dokumendis samas struktuuriga tippe mida vaja teise dokumenti teisendada sobis selleks named
template kasutamine. Lähtedokumendis selline osa sees mida vaja teisendada:

<DocumentParties>
      <BuyerParty context="partner">
        <PartyCode>RISMA</PartyCode>
        <Name>RISMA Peremarket AS</Name>
      </BuyerParty>
      <OrderParty context="partner">
        <PartyCode>RISMA_200</PartyCode>
        <Name>RISMA Peremarket AS Sukupilli KK</Name>
      </OrderParty>
      <SellerParty context="self">
        <PartyCode>-</PartyCode>
        <Name>Vensky Kaubanduse AS</Name>
      </SellerParty>
      <DeliveryParty context="partner">
        <PartyCode>RISMA_200</PartyCode>
        <Name>RISMA Peremarket AS Sukupilli KK</Name>
      </DeliveryParty>
</DocumentParties>

Alamtippude sisu sama aga tipu nimi erinev. Et ei peaks iga tipu jaoks oma malli tegema võib kasutada named template.

Named XSL template väljakutsumine iseenesest selline, parameetrina annab sisse tipu sisu ja tipu nime

<xsl:call-template name="Party">
          <xsl:with-param name="party" select="/E-Document/Document/DocumentParties/OrderParty" />
          <xsl:with-param name="partynode" select="'RecipientParty'" />
</xsl:call-template>

Kogu kupatus  koos tipu olemasolu kontrollidega, InvoiceParties all on need tipud mida peale teisendamist vaja saada

        <InvoiceParties>                       
            <xsl:if test="/E-Document/Document/DocumentParties/SellerParty">
                <xsl:call-template name="Party">
                    <xsl:with-param name="party" select="/E-Document/Document/DocumentParties/SellerParty" />
                    <xsl:with-param name="partynode" select="'SellerParty'" />
                </xsl:call-template>
            </xsl:if>           
            <xsl:if test="/E-Document/Document/DocumentParties/BuyerParty">
                <xsl:call-template name="Party">
                    <xsl:with-param name="party" select="/E-Document/Document/DocumentParties/BuyerParty" />
                    <xsl:with-param name="partynode" select="'BuyerParty'" />
                </xsl:call-template>
            </xsl:if>
            <xsl:if test="/E-Document/Document/DocumentParties/OrderParty">
                <xsl:call-template name="Party">
                    <xsl:with-param name="party" select="/E-Document/Document/DocumentParties/OrderParty" />
                    <xsl:with-param name="partynode" select="'RecipientParty'" />
                </xsl:call-template>
            </xsl:if>
            <xsl:if test="/E-Document/Document/DocumentParties/DeliveryParty">
                <xsl:call-template name="Party">
                    <xsl:with-param name="party" select="/E-Document/Document/DocumentParties/DeliveryParty" />
                    <xsl:with-param name="partynode" select="'DeliveryParty'" />
                </xsl:call-template>
            </xsl:if>
            <xsl:if test="/E-Document/Document/DocumentParties/PayerParty">
                <xsl:call-template name="Party">
                    <xsl:with-param name="party" select="/E-Document/Document/DocumentParties/PayerParty" />
                    <xsl:with-param name="partynode" select="'PayerParty'" />
                </xsl:call-template>
            </xsl:if>
        </InvoiceParties>


Named template ise

<xsl:template name="Party">
    <!--node mis antakse sisse töötlemiseks-->
    <xsl:param name="party" />
    <!--node nimi mis parameetrina sisse antakse-->
    <xsl:param name="partynode" />
    <!--teeme parameetri nime järgi tipu-->
    <xsl:element name="{$partynode}">
        <UniqueCode>
            <xsl:value-of select="$party/PartyCode"/>
        </UniqueCode>
        <Name>
            <xsl:value-of select="$party/Name"/>
        </Name>
        <xsl:if test="$party/DepID">
            <DepId>
                <xsl:value-of select="$party/DepID"/>
            </DepId>
        </xsl:if>
        <xsl:if test="$party/RegNum">
            <RegNumber>
                <xsl:value-of select="$party/RegNum"/>
            </RegNumber>
        </xsl:if>
        <xsl:if test="$party/VATRegNum">
            <VATRegNumber>
                <xsl:value-of select="$party/VATRegNum"/>
            </VATRegNumber>
        </xsl:if>
        <!--kontaktandmed-->
        <xsl:apply-templates select="$party/ContactData"></xsl:apply-templates>
        <!--konto info-->
        <xsl:apply-templates select="$party/AccountInfo"></xsl:apply-templates>
        <xsl:apply-templates select="$party/Extension"></xsl:apply-templates>
    </xsl:element>
</xsl:template>

reede, 21. oktoober 2011

Tühik ja reavahe XSL stylesheedil põhjustavad veateate xsl:attribute korral

XSL stylesheedi rakendamisel annab VisualStudio2010 vea

Attribute and namespace nodes cannot be added to the parent element after a text, comment, pi, or sub-element node has already been added

Vea põhjuseks võivad olla ka reavahetus/tühikud elementide vahel

    <Invoice languageId="" templateId="" channelId="" factoring="" regNumber="" serviceId="" channelAddress="">        
        <xsl:attribute name="invoiceId">
            <xsl:value-of select="/E-Document/Document/DocumentInfo/DocumentNum"/>
        </xsl:attribute>

veast saab lahti kui kahe elemendi vahelt tühikud ja reavahed ära korjad, ei näe küll ilus välja aga töötab

<Invoice languageId="" templateId="" channelId="" factoring="" regNumber="" serviceId="" channelAddress=""><xsl:attribute name="invoiceId">
            <xsl:value-of select="/E-Document/Document/DocumentInfo/DocumentNum"/>
        </xsl:attribute>

reede, 26. august 2011

Andmebaasi ühel väljal andmete uuendamise keelamise käsu süntaks

Vaja keelata, et üks andmebaasi roll ei saa muuta tabeli ühte välja
Süntaks siis selline:

DENY UPDATE(COMMENT) ON OBJECT::DBO.APPLICATION TO TENANT

Keelab andmete muutmise (UPDATE) tabeli APPLICATION väljal COMMENT andmebaasi rollile TENANT

teisipäev, 7. juuni 2011

Trigeri pinu

Mõnikord vaja teada, mis protseduur või SQL lausend põhjustab trigeri käivitamise
Trigeri pinu(trigger call-stack) teadasaamiseks saab kasutada DBCC INPUTBUFFER funktsiooni.

DML trigeri koodinäide

-- Püüame objekti ID kinni, kust trigeri väljakutse tehti DBCC INPUTBUFFER funktsiooni jaoks
DECLARE @temp2 NVARCHAR(4000), @temp NVARCHAR(MAX), @reqid INT
SET @reqid = ( SELECT request_id FROM sys.dm_exec_requests WITH(NOLOCK) WHERE session_id = @@SPID)
IF ISNULL(@reqid,0) = 0
SET @reqid = ( SELECT session_id FROM sys.dm_exec_requests WITH(NOLOCK) WHERE session_id = @@SPID)

--salvestame DBCC INPUTBUFFER funktsiooni väljakutsuva call stacki tabelmuutujasse
DECLARE @calls TABLE (EventType NVARCHAR(30) COLLATE DATABASE_DEFAULT NULL, Parameters SMALLINT NULL, EventInfo NVARCHAR(4000) COLLATE DATABASE_DEFAULT NULL)
DECLARE @sl NVARCHAR(4000)
SET @sl='DBCC INPUTBUFFER('+CAST(@reqid AS NVARCHAR(20))+') WITH NO_INFOMSGS'
--käivitab trigeris DBCC INPUTBUFFER funktsiooni
INSERT INTO @calls EXEC(@sl)

-- Teeme nüüd pinust väljavõtte
SET @temp2 = NULL
SELECT @temp2 = COALESCE(@temp2+',','') + EventType+' '+EventInfo FROM @calls

@temp2 muutujas on trigeri pinu olemas

pühapäev, 20. märts 2011

Dataseti sisseandmine ReportViewer 2010 aruandele

ReportViewer 2010-ga loodud aruandele on Datasettide sisseandmine programmi koodis tehtud lihtsamaks. Aruande dataseti dünaamiliseks etteandmiseks piisab tema nime teadmisest



C# koodis aruandele koodi külgepanek käib nii
//Kuna on ReportViewer2010 aruanne siis datasource külge panemine käib läbi DatSeti nime "DataSetApplications"
this.ReportViewerAsendus.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("DataSetApplications", (System.Data.DataTable)tb));

esmaspäev, 7. veebruar 2011

Teksti jagamine stringimassiiviks

muutujas htext on reavahetustega tekst

esimene rida
teine rida
kolmas rida

Masiivi saab temast teha, hea lihtne kirjutada

string[] slehed = htext.Split(new string[] { "\r\n", "|" }, StringSplitOptions.RemoveEmptyEntries);

"\r\n", "|" on realõpu tunnused, ehk massiiviks tehakse ka string

esimene rida|teine rida|kolmas rida