Özgür Özvarış

Bir yazılımcının kırık dökük dünyası

Sql Trace Log

clock Mayıs 19, 2014 13:40 by author OzgurOzvaris
Değerli arkadaşlar,

bu gün  sql den 10 sn den fazla süren sorguları loglamayı ve bunları sorgulamayı öğreneceğiz.

Kaynak :

http://msdn.microsoft.com/en-us/library/cc293613.aspx

http://msdn.microsoft.com/en-us/library/ms186265.aspx

Burada dikkat etmemiz gereken bir husus exec sp_trace_setevent @TraceID, 12, 15, @on sql fonksyonunda kullanılan değerler. Bunlar event codlar ve bu evente karşılık istediğimiz kolonlar.

declare @rc int 
declare @TraceID int 
declare @maxfilesize bigint 
set @maxfilesize = 20
exec @rc = sp_trace_create
@TraceID output, 
2, 
N'InsertFileNameHere', 
@maxfilesize, 
NULL
if (@rc != 0) goto finish 
-- Set the events 
declare @on bit 
set @on = 1 
exec sp_trace_setevent @TraceID, 12, 15, @on 
exec sp_trace_setevent @TraceID, 12, 16, @on 
exec sp_trace_setevent @TraceID, 12, 1, @on 
exec sp_trace_setevent @TraceID, 12, 9, @on 
exec sp_trace_setevent @TraceID, 12, 17, @on 
exec sp_trace_setevent @TraceID, 12, 6, @on 
exec sp_trace_setevent @TraceID, 12, 10, @on 
exec sp_trace_setevent @TraceID, 12, 14, @on 
exec sp_trace_setevent @TraceID, 12, 18, @on 
exec sp_trace_setevent @TraceID, 12, 11, @on 
exec sp_trace_setevent @TraceID, 12, 12, @on 
exec sp_trace_setevent @TraceID, 12, 13, @on 
-- Set the Filters 
declare @bigintfilter bigint 
set @bigintfilter = 10000 
exec sp_trace_setfilter @TraceID, 13, 0, 4, @bigintfilter 
-- Set the trace status to start 
exec sp_trace_setstatus @TraceID, 1 
-- display trace id for future references 
select TraceID=@TraceID 
finish: 
go

Gelelim bu trace logu sorgulamaya 

SELECT IDENTITY(int, 1, 1) AS RowNumber, * INTO temp_trc from fn_trace_gettable('trace path.trc', 1)

select * from temp_trc

 İyi çalışmalar.



Windows Forms Listbox

clock Mayıs 19, 2014 10:33 by author OzgurOzvaris

Değerli Arkadaşlar,

Eğer windows forms listbox nesnesi ile biraz daha ileri uygulamalar yazmak isterseniz bu yazı faydalı olacaktır.

Kaynaklar : http://stackoverflow.com/questions/867514/make-listbox-items-have-a-different-value-than-item-text

Data isimli text value fieldlı claasın list boxta listelenip değerinin alınması.

Önce class oluşturulur.

public class SomeData
{
    public string Value { get; set; };
    public string Text { get; set; };
}

Sonra class içine değerler doldurulur.

List<SomeData> data = new List<SomeData>();
data.Add(new SomeData() { Value = 1, Text= "Some Text"});
data.Add(new SomeData() { Value = 2, Text = "Some Other Text"});

Daha sonra listbox'a bağlanır

listBox1.DisplayMember = "Text";
listBox1.DataSource = data;

İstenen içerik alınır

int value = (listBox1.SelectedItem as SomeData).Value;

 

 



Web Service Soap Header Linkler

clock Mayıs 14, 2014 11:09 by author OzgurOzvaris

wcf soap Log

http://stackoverflow.com/questions/17620228/log-soap-messages-from-a-console-application

SoapExtension Walkthrough -- VS7 version

http://radio-weblogs.com/0105476/stories/2002/03/22/soapextensionWalkthroughVs7Version.html

Programmatically Insert SoapHeader into SOAP Request with ASMX SoapExtensions

http://blogs.msdn.com/b/kaevans/archive/2007/08/06/programmatically-insert-soapheader-into-soap-request-with-asmx-soapextensions.aspx

private void AddHeader(SoapMessage message)
{
    CustomSoapHeader header = new CustomSoapHeader();
    header.CastMemberID = "gsupike@hotmail.com";
    header.MustUnderstand = false;
    message.Headers.Add(header);
}

 How to: Define and Process SOAP Headers 

http://msdn.microsoft.com/en-us/library/8728chd5(v=vs.80).aspx

 How to obtain SOAP Request body in C# Web

http://desalasworks.com/article/how-to-obtain-soap-request-body-in-c-web-services/

using System;
using System.Collections.Generic;
using System.Web;
using System.Xml;
using System.IO;
using System.Text;
using System.Web.Services;
using System.Web.Services.Protocols;
 
namespace SoapRequestEcho
{
  [WebService(
  Namespace = "http://soap.request.echo.com/",
  Name = "SoapRequestEcho")]
  public class EchoWebService : WebService
  {
    [WebMethod(Description = "Echo Soap Request")]
    public XmlDocument EchoSoapRequest(int input)
    {
      // Initialize soap request XML
      XmlDocument xmlSoapRequest = new XmlDocument();
 
      // Get raw request body
      using (Stream receiveStream = HttpContext.Current.Request.InputStream)
      {
        // Move to begining of input stream and read
        receiveStream.Position = 0;
        using (StreamReader readStream = 
                               new StreamReader(receiveStream, Encoding.UTF8))
        {
          // Load into XML document
          xmlSoapRequest.Load(readStream);
        }
      }
      // Return
      return xmlSoapRequest;
    }
  }
}

 Add Request SOAP-Header to Response

We will develop a web service that would authenticate users for web sites. The web site needs to pass the user ID as well as the password for the user. Apart from this the web site also needs to pass the sites ID and password. This information is needed so that the web service can validate the site that have requested for the user authentication.

The user ID and the password will be passed through the parameters of an authenticate method exposed by the web service, while the sites ID and password will be passed using SOAP header. Since the data is very sensitive SOAP extension will be used to encrypt the data and decrypt them.

http://stackoverflow.com/questions/7321526/add-request-soap-header-to-response

http://wso2.com/library/articles/extending-axis2/

Using SOAP Header and SOAP Extensions in a Web Service

case SoapMessageStage.BeforeDeserialize:

case SoapMessageStage.BeforeDeserialize:
readStr = new StreamReader(outwardStream);
writeStr = new StreamWriter(inwardStream);
soapMsg1 = readStr.ReadToEnd();
if ( message is System.Web.Services.Protocols.SoapClientMessage)
{
  // this is executed at client side
  xDoc.LoadXml(soapMsg1);
  XmlNodeList xResult = xDoc.GetElementsByTagName("AuthenticateResult");
  xResult[0].InnerXml = decrypt(xResult[0].InnerXml);
}
else if( message is System.Web.Services.Protocols.SoapServerMessage)
{
  // this is executed at server side
  xDoc.LoadXml(soapMsg1);
  XmlNodeList xSiteID = xDoc.GetElementsByTagName("siteID");
  xSiteID[0].InnerXml = decrypt(xSiteID[0].InnerXml);
  XmlNodeList xSitePwd = xDoc.GetElementsByTagName("sitePwd");
  xSitePwd[0].InnerXml = decrypt(xSitePwd[0].InnerXml);
  XmlNodeList xUserID = xDoc.GetElementsByTagName("UserID");
  xUserID[0].InnerXml = decrypt(xUserID[0].InnerXml);
  XmlNodeList xPwd = xDoc.GetElementsByTagName("Password");
  xPwd[0].InnerXml = decrypt(xPwd[0].InnerXml);
}
soapMsg1 = xDoc.InnerXml;
writeStr.Write(soapMsg1);
writeStr.Flush();
inwardStream.Position = 0;

case SoapMessageStage.AfterSerialize: 

case SoapMessageStage.AfterSerialize:
inwardStream.Position = 0;
readStr = new StreamReader(inwardStream);
writeStr = new StreamWriter(outwardStream);
soapMsg1 = readStr.ReadToEnd();
if ( message is System.Web.Services.Protocols.SoapClientMessage)
{
  // this is executed at client side
  xDoc.LoadXml(soapMsg1);
  XmlNodeList xSiteID = xDoc.GetElementsByTagName("siteID");
  xSiteID[0].InnerXml = encrypt(xSiteID[0].InnerXml);
  XmlNodeList xSitePwd = xDoc.GetElementsByTagName("sitePwd");
  xSitePwd[0].InnerXml = encrypt(xSitePwd[0].InnerXml);
  XmlNodeList xUserID = xDoc.GetElementsByTagName("UserID");
  xUserID[0].InnerXml = encrypt(xUserID[0].InnerXml);
  XmlNodeList xPwd = xDoc.GetElementsByTagName("Password");
  xPwd[0].InnerXml = encrypt(xPwd[0].InnerXml);
}
else if( message is System.Web.Services.Protocols.SoapServerMessage)
{
  // this is executed at server side
  xDoc.LoadXml(soapMsg1);
  XmlNodeList xResult = xDoc.GetElementsByTagName("AuthenticateResult");
  xResult[0].InnerXml = encrypt(xResult[0].InnerXml);
}
soapMsg1 = xDoc.InnerXml;
writeStr.Write(soapMsg1);
writeStr.Flush();
break;

 

 

 



IIS 7 mvc problemi

clock Nisan 3, 2014 18:40 by author OzgurOzvaris

Değerli Arkadaşlar,

Daha önce bu sorunu çözmüştüm. Ancak meğerse bir sunucuda Application pool'u integrated deyince sorun çıkmıyormuş ancak classic deyince mvc olarak değilde normal aspx uygulaması gibi çalışmaya başladı.

Normal bir aspx gibi çalışmaya başladığını "403.14 - Directory listing denied." hatasından anladım. MVC uygulamalarda bir default sayfa olmadığı için eğer düzgün kurulmamış ise sizi adres bardaki satırdan bir directory'i açmaya çalışıyorsunuz sanıyor.

Sunucuda çalışan MVC uygulaması var, MVC runtime install edilmiş. Sonunda sebebi buldum ama bir günüm gitti. Sizin gitmesin diye yazıyorum.

Öncelikle başka bir sunucumda sorunsuz çalışan classic pool olan uygulamadan kıyasladım, application pool classic seçilince bu iis'de uygulamada bazı modüllerin yüklenmediğini farkettim (Features bölümünden modules'den) bu nedenle faydası oldu mu bilmiyorum ancak iis 7'e yüklenmemiş modülleride yükledim. Sorun çözülmedi.

Sonra şu harika dökümanı buldum.

http://www.asp.net/mvc/tutorials/older-versions/deployment/using-asp-net-mvc-with-different-versions-of-iis-cs

bu dökümandaki Creating a Wildcard Script Map bölümü sorunumu çözdü. Bu bölümdekileri harfiyyen yaptım ve mvc uygulamam çalışmaya başladı.

Hala diğer sunucumda böyle bir şey yapmama rağmen sorunsuz bir şekilde classic pool ile nasıl çalıştığını anlayamadım o da ayrı konu :)

Herkese İyi çalışmalar.

 

 

 

 



Internet Explorer dopostback not defined

clock Mart 19, 2014 11:10 by author OzgurOzvaris

Değerli Arkadaşlar,

Internet Explorer 11 güncelemesi gelince dopostback not defined hatası ile karşılaşabilirsiniz. Bu konu ile ilgili bir kaç kaynak paylaşacağım.

http://stackoverflow.com/questions/20834485/postback-not-working-in-production-server-ie-11

http://stackoverflow.com/questions/16914538/asp-net-dropdownlist-onselectedindexchanged-does-not-fire-in-ie-10

http://stackoverflow.com/questions/19987379/dopostback-not-defined-when-using-ie11

http://www.hanselman.com/blog/IE10AndIE11AndWindows81AndDoPostBack.aspx

http://support.microsoft.com/kb/2836939/en-us (Sorunumu bu .net 4.0 updati çözdü)

İyi çalışmalar.



mssql table index used size list

clock Mart 4, 2014 11:33 by author OzgurOzvaris
DECLARE CURGETTABLESIZE CURSOR FOR

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_NAME 

OPEN CURGETTABLESIZE

declare @tablename varchar(100)

FETCH NEXT FROM CURGETTABLESIZE 

INTO @tablename
 

create table #TablesSize ( 

[name] nvarchar(128) NOT NULL,

[rows] char(11) NULL,

[reserved] varchar(18) NULL,

[data] varchar(18) NOT NULL ,

[index] varchar(18) NOT NULL ,

[unused] varchar(18) NOT NULL ,

)

create table #iTablesSize (

[name] nvarchar(128) NOT NULL,

[rows] int NULL,

[reserved]int NULL,

[data] int NOT NULL ,

[index] int NOT NULL ,

[unused] int NOT NULL ,

)

WHILE @@FETCH_STATUS = 0

BEGIN

insert into #TablesSize EXEC sp_spaceused @tablename

FETCH NEXT FROM CURGETTABLESIZE INTO @tablename

END

CLOSE CURGETTABLESIZE

DEALLOCATE CURGETTABLESIZE
 

--insert @iTablesSize select name, cast([rows] as int),cast(left(data,charindex('KB',data)-1) as int) ireserved, cast(left(data,charindex('KB',data)-1) as int) idata, cast(left([index],charindex('KB',[index])-1) as int) iindex, cast(left([unused],charindex('KB',unused)-1) as int) iunused from #TablesSize

insert #iTablesSize select name, cast([rows] as int),cast(left(data,charindex('KB',data)-1) as int) ireserved, cast(left(data,charindex('KB',data)-1) as int) idata, cast(left([index],charindex('KB',[index])-1) as int) iindex, cast(left([unused],charindex('KB',unused)-1) as int) iunused from #TablesSize

select * from #iTablesSize order by rows

drop table #TablesSize

drop table #iTablesSize


Full Text Search

clock Mart 4, 2014 11:11 by author OzgurOzvaris

Değerli Arkadaşlar,

Bu gün biraz fulltext search nasıl yapılır onu paylaşmak istiyorum.

Bu Linler ayrıca faydalı olacaktır

http://blog.sqlauthority.com/2008/09/05/sql-server-creating-full-text-catalog-and-index/

http://stackoverflow.com/questions/11616304/entity-framework-code-first-and-full-text-search

http://sqlblogcasts.com/blogs/simons/archive/2008/12/18/LINQ-to-SQL---Enabling-Fulltext-searching.aspx 

Öncelikli olarak her ihtimale karşı sistem enable duruma getirilir.

sp_fulltext_database 'enable'

Sonra FultextSearch cataloğu oluşturulur

CREATE FULLTEXT CATALOG [myFullText] WITH ACCENT_SENSITIVITY = ON

Katalog oluşturma ile ilgili detaylı bilgi için http://msdn.microsoft.com/en-us/library/ms189520(classic).aspx adresinden faydalanabilirsiniz.

Sıra indexin kolona atanmasına geldi

CREATE FULLTEXT INDEX ON TableName(ColumnName) KEY INDEX PK_Index ON myFullText;

Şimdi ColumnName ismi ile belirtilen kolona full index text search tanımlanmış oldu.

Sıra Full text Searchle ilgili bir kaç sorgulama örneği yapmaya geldi.

Bir kolon üzerinde FTS oluşturulunca artık o kolonla ilgili sorgulamalarda

  • FREETEXT
  • FREETEXTTABLE
  • CONTAINS
  • CONTAINSTABLE

Sorgu cümlelerini kullanabilmektesiniz.

Detaylı açıklama için http://www.developer.com/db/article.php/3446891/Understanding-SQL-Server-Full-Text-Indexing.htm linki güzel...

Detaylı örnekler için http://msdn.microsoft.com/en-us/library/ms187787(lightweight).aspx adresine bakabilirsiniz.

Ör 1 :

SELECT ProductName
FROM Products
WHERE FREETEXT (ProductName, 'spread' )

 

Sorgusu sonuç olarak

ProductName                             
----------------------------------------
Grandma's Boysenberry Spread Vegie-spread

(2 row(s) affected)

döner.
Ör 2.

SELECT ProductName
FROM Products
WHERE CONTAINS(ProductName, '"laugh*" NEAR lager')

Sonuç olarak

ProductName                             
----------------------------------------
Laughing Lumberjack Lager

(1 row(s) affected)

Değerlerini döner. Yukarıda detaylı örnekler var dediğim msdn linkinde çok güzel örnekler var ancak anladığım kadarı ile kuvvetli sogular ve geri dönüşler yapabilmek için biraz da uğraşıp döngüler ve birbirine ilave sorgu cümleleri kullanmak gerekiyor. yoksa mevcut uygulamalarla kıyaslanınca biraz temel örenekler gibi geldi.

Herkese Selamlar.



Jmeter

clock Şubat 14, 2014 16:14 by author OzgurOzvaris

Değerli Arkadaşlar,

Soap datalarımızın response timeları ile birtürlü baş edemiyoruz. Bizde biraz daha profesyonel bir tool bulmaya karar verdik.

Jmeter güzel bir toola benziyor.

İlk başta sadece linux ortamında çalışıyor diye üzüldük ancak sonra yaptığımız araştırmada windows ortamında da çalıştığını gördük.

Konu ile ilgili bir kaç link paylaşacağım.

http://jmeter.apache.org/

Bu işin windowstada olduğunu gösteren blog. Çıkış noktamız bu oldu.

http://desulicious.blogspot.com.tr/2012/07/jmeter-for-windows-7.html

Buradaki örnekte JMeter 2.7, JDK 1.6.0 or later ile yapmış ancak biz güncel versiyolarla başardık. Jmeter 2.11 ile çalıştırdık.

dökümanda bahsedilen zip dosyasını ilk kurduğumuzda jmeter.bat dosyası bir hata verdi "Unable to access jarfile ApacheJMeter.jar errorlevel=1" bu hata bizi biraz uğraştırdı http://stackoverflow.com/questions/10480042/how-to-resolve-the-error-unable-to-access-jarfile-apachejmeter-jar-errorlevel-1  ancak sonunda içinde ApacheJMeter.jar dosyası olan bir zip file'ı  http://www.apache.org/dist/jmeter/binaries/ linkinde bulduk burdaki zip 30mb.

Sonra artık kullanmayı anlamak kaldı. Onun için

http://aravindamadusanka.blogspot.com.tr/2012/08/how-to-use-apache-jmeter-for-web.html

güzel bir blog oldu.

Tabiki jmeter anladığımız kadarı ile çok kapsamlı bir tool ama şimdilik amacımıza ulaştık.

Sizlerede faydalı olabilr düşüncesiyle paylaşıyorum.

Herkese Selam.

 



Mvc Architectural poster

clock Şubat 5, 2014 15:20 by author OzgurOzvaris

Değerli Arkadaşlar,

Biliyorsunuz kuş bakışı önemlidir. Eğer MVC ye kuş bakışı bakmak isterseniz bu resimler faydalı olacaktır kanaatindeyim.

Kaynak

http://saulius.sunauskas.com/2013/10/14/understanding-asp-net-mvc-request-processing-pipeline-visually/

http://www.dotnet-tricks.com/Tutorial/mvc/TbR0041112-Asp.net-MVC-Request-Life-Cycle.html

asp_net_mvc_poster.zip (458.13 kb)

 

 

 



MSSQL Çok satırlı update

clock Ocak 27, 2014 16:54 by author OzgurOzvaris

Değerli Arkadaşlar,

Geçen gün ilginç bir durum başımıza geldi. Çok satırlı update cümlesi çalıştırmamız gereken bir databasede hardiskte yer problemi vardı. Her bir update cümlesi logda şişmeye sebep olduğu için belli bir süre sonra hdd de yer kalmıyordu. En sonunda kendimize bir stored procedure yazmaya karar verdik. Stored procedure tablodaki kayıt sayısına göre belli aralıklarla db yi shirink ediyor böylece log sıfırlanıyor. Bu da hdd deki yer tüketimini engelledi. Bizim işimize yaradı belki sizlerinde işine yarıyabilir düşüncesi ile paylaşıyorum.

Declare @id decimal, @tmpid decimal

SELECT @id = max(Table1_ID) FROM Table1

SET @tmpid = 0

WHILE 1=1
begin 
      
      DBCC SHRINKDATABASE (DB, 10);

     
        update Table1 set full_Index = ltrim(rtrim(convert(char(2), FSFIRM_ID)))  + Rtrim(full_Index)
            WHERE Table1_ID >= @tmpid AND Table1_ID < @tmpid + 500000
     
      if (@tmpid > @id)
      begin
            break
      end
      
       SET @tmpid = @tmpid + 500000
      
      if(@tmpid > @id)
      begin
           set @tmpid = @id +1
      end
     
      print @tmpid
     
end

İyi çalışmalar.



Hakkımızda  AboneOl 

Blog Yayınımıza Hoşgeldiniz.

Month List

RecentPosts

Sign In