|
ÖRNEK UYGULAMA(END POINT,CLR,XML,SCHEMA)
Bir veri tabanı yapıp
orada insanların insanlar hakkındaki görüşlerini tutup bunlarıda diğer insanlarla
paylaşmak istiyorum.Bir tablo oluşturmalıyım ve bu tabloya herkes kayıt girebilmeli.Ben
uygulama geliştirmeyecem,sadece alt yapıyı hazırlayacam ve insanlar hangi dilde
yazarlarsa yazsınlar benim bu veri tabanıma kayıt girebilecekler.Yalnız herkes kendi
kafasına göre veri giremeyecek.Gorus adında bir tablom olacak ve bu tabloda Id,Icerik,Tarih
bilgileri yer alacak.Kısıtlamalar şunlardır;
·
Id identity olacak.
·
Icerik XML dökümanı olacak ve XSD ile kontrol edilecek.XML dökümanı formatı şu şekilde
olacak;
|
<Kayit>
<Ad>Ahmet</Ad>
<Arkadas>Mehmet</Arkadas>
<Gorus>Mehmet
iyidir.</Gorus>
<Yer>İngilizce
kursundan</Yer>
</Kayit>
|
·
Tarih üzerinde Default contraint olacak.
Her 100 kayıtta bir belirtilen bir
mail adresine mail atacak.
Tablo & XML Schema:
|
CREATE TABLE
Gorus
(
Id
INT IDENTITY(1,1)
NOT NULL,
Icerik XML
NOT NULL,
Tarih SMALLDATETIME
NOT NULL,
CONSTRAINT DF_Gorus_Tarih
DEFAULT (GETDATE()),
CONSTRAINT [PK_Gorus] PRIMARY
KEY(Id)
)
CREATE XML
SCHEMA COLLECTION
GorusSchema As
'<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="Kayit">
<complexType>
<sequence>
<element name="Ad" type="string"/>
<element name="Arkadas" type="string"/>
<element name="Gorus" type="string"/>
<element name="Yer" type="string"/>
</sequence>
</complexType>
</element>
</schema>'
ALTER TABLE
Gorus
ALTER COLUMN
Icerik XML(GorusSchema)
|
User Defined Function:
|
public partial
class UserDefinedFunctions
{
[SqlFunction]
public static SqlString
MailGonder(SqlInt32 sayi) {
if (sayi % 100 == 0) {
SmtpClient smtp =
new SmtpClient("mail.ttnet.net.tr");
smtp.Credentials = new
NetworkCredential("iksite@ttnet.net.tr",
"123456");
MailAddress from =
new MailAddress("iksite@ttnet.net.tr");
MailAddress to =
new MailAddress("nurettinsimsek@yahoo.com");
MailMessage msg =
new MailMessage(from, to);
msg.Subject = "Görüş Sayısı";
msg.Body = "Toplam Görüş sayısı:<b>"+sayi+"</b>";
msg.IsBodyHtml = true;
smtp.Send(msg);
}
return
"";
}
};
|
Görüş eklemek için Store Procedure:
|
CREATE PROCEDURE
GorusEkle(
@icerik
NVARCHAR(MAX)
)
AS
BEGIN
DECLARE @count INT;
INSERT INTO Gorus(Icerik)
VALUES(@icerik)
SELECT @count =
COUNT(*) FROM Gorus
SELECT dbo.MailGonder(@count)
END
|
Dış dünyaya açılması için End Point:
|
CREATE ENDPOINT
GorusEkleEndPoint
STATE=STARTED
AS HTTP(PATH='/sql/GorusEkle',
AUTHENTICATION=(INTEGRATED),
PORTS=(CLEAR))
FOR SOAP(
WEBMETHOD
'GorusEkle'
(NAME='Gorusler.dbo.GorusEkle'),
BATCHES=ENABLED,
WSDL=DEFAULT,
SCHEMA=STANDARD,
DATABASE='Gorusler',
NAMESPACE='http://tempUri.org/')
|
Uygulama:
Bir başka kişinin Windows uygulaması
gerçekleştirdiğini farzedelim.Projesine Add Web reference diyerek End Point’imizi
ekleyecek ve Ardından gerekli arayüzleri oluşturktan sonra Button Click eventi için
şu metodu gerçekleştirecektir;
|
private void
btnGorusEkle_Click(object sender,
EventArgs e) {
GorusEkleEndPoint proxy = new
GorusEkleEndPoint();
proxy.Credentials
= CredentialCache.DefaultCredentials;
proxy.GorusEkle(txtGorus.Text);
/*
* txtGorus.Text=@"<Kayit>
*
<Ad>Ahmet</Ad>
*
<Arkadas>Mehmet</Arkadas>
*
<Gorus>Mehmet iyidir.</Gorus>
*
<Yer>İngilizce kursundan</Yer>
*
</Kayit>"
*
*/
}
|
|