11 Temmuz 2014 Cuma

IIS subpath'te ayrı bir uygulama çalıştırmak

Merhaba,

 

IIS 7 ve üzerinde host edilen uygulamalarımızda, aynı domain ve subpath’lerinde farklı uygulamalar çalıştırmamız gereken durumlar olacaktır.

 

Örneğin;

xyz.fabrikam.com isimli dns’ten yayın yapan bir web application var. Klasik bir asp.net uygulaması. Forms authentication ile çalışıyor.

xyz.fabrikam.com\ozelservis isimli bir adresten web servis ile farklı uygulamalara data yayınlamak istiyoruz.

 

Mevcut durum:

 

İstenilen:

1)      Sağ click, add application

 

2)      Alias tanımlama ve web servis path’i gösterme

 

3)      Sonuç

Çalışma ortamını hazırladık.

Devamında yaşanan en büyük sorun, child uygulamanın, master uygulamanın web.config dosyasından etkilenmesi (en sık yaşanan örnek, site forms authenticationlı, web servis’e erişimde sıkıntı yaşanır).

Bunu yönetmek için en yaygın çözüm yöntemi inheritInChildApplications kullanımı.

Tag’in kullanımı ile ilgiye aşağıdaki linkten bakabilirsiniz.

http://msdn.microsoft.com/tr-tr/library/system.configuration.sectioninformation.inheritinchildapplications(v=vs.110).aspx

 

İyi çalışmalar

9 Temmuz 2014 Çarşamba

The report parameter is read-only and cannot be modified. (rsReadOnlyReportParameter)

The report parameter 'Parametre İsmi' is read-only and cannot be modified. (rsReadOnlyReportParameter)
1)) Rapor get latest alınır.
2)) Proje içinden rapor paremetresi Visible ve Prompt dolu hale getirilmelidir.

       3)) Hangi sunucuya devreye alım yapılacak ise,  sunucudan o rapor silinir ( yetki yoksa sildirilir.)

      4))  proje içinden rapor "deploy" yapılır.

1 Temmuz 2014 Salı

Telerik 2014.2.618.35 2014 Q2 Walkthrough

Telerik 2014.2.618.35 2014 Q2 Walkthrough

1- Fix Html Bugs
a) no "not opened tag", no "not closed tag" etc.,
b) same width for the same <td> in different <tr>
c) no duplicate UniqueName   between  <columns></columns> tags
d) GridColumns'  DataFields must exist in the data source  ( is DataField is set to ="XXX" , the datasource must have "XXX" field before the binding)

2- GridBoundColumn Property Tag Rename : Visible to Display
<telerik:GridBoundColumn DataField="BookingId" UniqueName="BookingId" Visible="false"   Display="false">
(Visible="false" columns are no more in the view state)

3- <GridBoundColumn… Display=false >
a) Number of these columns must fewer than other columns number.
b) These columns must be stated at bottom of <columns></columns> block

4- Web Config Settings

Add / Change

<appSettings>
    <add key="Telerik.Grid.Skin" value="2011"/>
    <add key="Telerik.Grid.EnableEmbeddedSkins" value="false"/>
    <add key="Telerik.GridFilterMenu.Skin" value="2011"/>
    <add key="Telerik.GridFilterMenu.EnableEmbeddedSkins" value="false"/>
    <add key="Telerik.Dock.Skin" value="Yna"/>
..
..
..

<controls>
        <add tagPrefix="telerik" namespace="Telerik.Web.UI" assembly="Telerik.Web.UI, Version=2014.2.618.35, Culture=neutral, PublicKeyToken=121fae78165ba3d4"/>
      </controls>
5- if the GridExpandColumn does  not rendered properly

protected void BookingListesiGridView_ColumnCreated(object sender, GridColumnCreatedEventArgs e)
        {
            if (e.Column.ColumnType == "GridExpandColumn")
            {
                e.Column.HeaderStyle.Width = Unit.Pixel(35);
            }
        }

6- RadUpload ContentLenght property is long now. You may need to remove, change or add  the "conversion" code.

7 -Test your pages for different ie versions especially for Document mode 7 (f12 developer tools)

26 Haziran 2014 Perşembe

Telerik.Web.UI.WebResource.Exists System.NullReferenceException dynatrace

1. Check
 
Telerik.Web.UI.dll is in the GAC:
<system.webserver>
<handlers>
    … 
    <add name="Telerik.Web.UI.WebResource"  path="Telerik.Web.UI.WebResource.axd" verb="*"    type="Telerik.Web.UI.WebResource, Telerik.Web.UI, Version=[ASSEMBLY_VERSION], Culture=neutral, PublicKeyToken=121fae78165ba3d4" />
    …
</handlers>
</system.webserver>
 
 
Telerik.Web.UI.dll is not in the GAC:
              
<system.webserver>
<handlers>
    … 
    <add name="Telerik.Web.UI.WebResource"  path="Telerik.Web.UI.WebResource.axd" verb="*" type="Telerik.Web.UI.WebResource, Telerik.Web.UI" />
    …
</handlers>
</system.webserver>
 
 
<httpHandlers>
      <add path="Telerik.Web.UI.WebResource.axd" verb="*" type="Telerik.Web.UI.WebResource, Telerik.Web.UI" validate="false"/>
      <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah"/>
    </httpHandlers>
 
 
 
2. Check
 
IIS7 Integrated Mode: The following statement should be present in the <handlers> section instead of <httpHandlers>:
<handlers> 
<add name="Telerik.Web.UI.WebResource" 
path="Telerik.Web.UI.WebResource.axd" verb="*"  
type="Telerik.Web.UI.WebResource, Telerik.Web.UI, Culture=neutral, PublicKeyToken=121fae78165ba3d4"/>
 
 <handlers>
      <add name="TelerikHandler" path="Telerik.Web.UI.WebResource.axd" verb="*" type="Telerik.Web.UI.WebResource, Telerik.Web.UI" />
      <add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
      <add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
    </handlers>
  </system.webServer>
 

13 Haziran 2014 Cuma

Publish Sırasinda web.config Nasıl Exclude Yapılır

Visual Studio ile çalışıyorsunuz ve canlı ortamdaki web.config dosyanızı publish sırasında ezmek istemiyorsunuz.

 

Çözümü oldukça basit;

Simply select the web.config properties and change 'Build Action' to 'None' and 'Copy To Output Directory' to 'Do Not copy'

 

Kolay gelsin..

 

12 Haziran 2014 Perşembe

Biztalk 2013 konfigürasyonu sırasında alınan Invalid column name ‘id’ hatası

Biztalk 2013 kurulumunu tamamladıktan sonra configuration aşamasında aşağıdaki gibi bir hata alabilirsiniz.

 

"Failed to create management database "BiztalkMgmtDb" on server "XXX".

Statement(s) could not be prepared.

Invalid column name 'id'.

 

 

 

 

Sorunun temel kaynağı SQL server kurulumunda 'Server Collation' TURKISH_CI_AS olması. (Sql server management studio'da server üzerine sağ click yaparak açılan pencerede görülebilir.)

 

 

Temel olarak BTS_Administration_Logic dosyası (Biztalk kurulum dizini içindeki Schema dizininde duruyor) içinde bulunan bir scriptte 'select sh.id from adm_sendhandler ...' ile başlayan bir sql var fakat adm_sendhandler tablosunda sql de id olarak yazan kolon Id olarak tanımlı. TURKISH_CI_AS olmasından dolayı "id" ile "Id" aynı olmadığı varsayılıyor ve sanki bu tabloda id kolonu yokmuş gibi davranıyor.

 

 

 

 

Çözüm : select sh.id from adm_sendhandler sql cümlesi içindeki id kolonunu Id ile değiştirip BTS_Administration_Logic dosyasını kaydedin ve Biztalk configürasyonu yeniden deneyin.

11 Haziran 2014 Çarşamba

Windows 8 işletim sistemi üzerinde .NET Framework 3.5 Kurulumu

Windows 8 işletim sisteminde .NET Framework 3.5 framework kurulumu sırasında aşağıdaki gibi bir hata alabilirsiniz;

 

"Windows couldn't complete the requested changes. Windows couldn't connect to the internet to download necessary files. Make sure that you're connected to the internet, and click 'Retry'. Error code: 0x800F0906”

 

Yapılacaklar;

 

1.       Windows 8 kurulum diskini sürücünüze yerleştirin,

2.       Command prompt açın. (windows arama kutusuna cmd konutu yazın). Açarken ‘Run as Administrator’ olarak açmalısınız.

3.       Aşağıdaki komutu çalıştırın

 

Dism /online /enable-feature /featurename:NetFx3 /All /Source:"Path to installation media":\sources\sxs /LimitAccess

 

Path to installation media yerine windows 8 diskinizin sürücü harfini girin ( Örneğin D: )

 

Kurulum başlatılacaktır.

 

14 Nisan 2014 Pazartesi

ORACLE USER AUDIT TRAIL DB LOG

SELECT
  FROM user_audit_trail lo
 WHERE
  --LO.OBJ_NAME NOT IN ( 'GOP_SEF_LOK_MV', 'BUTCE_AKTARIMI_TMP','EVENT_TABLE_BRD') AND
  --LO.OBJ_NAME =  'LOKASYON' AND
   trunc(timestamp) > trunc(sysdate)- :KAC_GUNLUK_LOG
order by timestamp desc

18 Mart 2014 Salı

windows service'i debug yapmak için

Merhaba,

 

Windows servisi debug yapabilmek için 2 küçük adım atmamız gerekiyor.

 

1)      Service koduna asagidaki satırları ekleyelim

 

2)      Proje özelliklerinden startup metodunu düzenleyelim

 

**Bu ayarlar sadece debug yapabilmek içindir. Devreye alım sırasında kaldırılmalıdır.

 

Kolay gelsin

Serkan

13 Şubat 2014 Perşembe

IISExpress ve SSL

Merhaba,
IISExpress kullanıldığı zaman SSL denemelerinde beklenmeyen hatalar oluşabiliyor. IIS canlı ortama benzetim için çok güzel bir makale.
Bir javascript istemcinin, SSL kanaldan basic authentication yapması için hazırladığımız demo projede oldukça işimize yaradı.
 
 

22 Ocak 2014 Çarşamba

Sql Server 2008 Sayaç Tablosu

Merhaba,

 

Sql Server 2008 üzerinde belli bir kural bazında sayaç bilgisi tutan bir tablomuz olsun.

Böyle bir senaryoda en büyük hata, tahmin edeceğiniz gibi istekte bulunan kodun aynı sayıyı almasıdır.

 

Konuyla ilgili çok güzel bir makale.

 

Hem uygulama kodu hem de DB procedure kodu çözümleri içeriyor.

Tavsiyemiz, tek database varsa DB çözümünün uygulanması (uygulama instance sayısı her zaman tek olmaz).

http://www.codeproject.com/Articles/607329/Thread-safety-with-SQL-Server-2008

 

Serkan

13 Aralık 2013 Cuma

Global Temporary Tables GTT

ORACLE'in geçici kayıt tutmak için sunduğu bir tablo yapısı var. Bu tablo bir kez yaratılıyor. Bundan sonra ister kodun içinden ister TOAD gibi aracın içinden ORACLE'a bağlanın, bu tabloya yazdığınız kayıtları sadece siz görüyorsunuz. Kod bloğunuzda veya TOAD'ın içinden COMMIT veya ROLLBACK yaptığınızda tablo yazdığınız kayıtların ömrü bitmiş oluyor. ORACLE'ın  bizim yerimize bu tabloya sessionID diye bir sütun açtığını ve bu tabloya gelen okuma yazma sorgularının başına bu kuralan bağlantının (session'ın) Id^sini yazdığımızı düşünebiliriz.

Ne gibi problemlerin üzerinden gelmek için bu yaklaşımı kullanabiliriz?  (Bu amaçla yarattığımız tablonun adının PARAMETER_TABLE_GTT olduğunu düşünelim)

Rapor sorgusunu yazarken, raporu çalıştırdığımız parametleri Rapor sorgurunu içine  = :KUMPANYA_ID veya IN :KUMPANYA_ID_LIST diye ekleriz.  Rapor çalıştığında bizim parametrelerimiz, sorgu betiği içinde bunlarla yer değiştirir ve orjinalinde sanki bizim gönderidğimiz değerler varmış gibi çalışır. View içine parametre geçmek diye tabir edebileceğimiz bu yaklaşımı,  istediğimiz parametleri PARAMETER_TABLE_GTT kayıt ederek ve orijinal sorgumuzu bu tabloya join yaparak gerçekleştirebiliriz.

Kod içinden elde ettiğimiz ve başka bir sorgunun WHERE kısmına  IN ile eklemek istediğimiz değerleri bu tabloya yazarak, orijinal sorgumuzda bu tabloya exist olarak ekleyebiliriz.

Ayrıntılı bilgiye buradan ulaşabilirsiniz.


Örnek bir kullanımın adımları

Tablo Yaratılması  (Bir kez yapılacak bir işlemdir)

DROP TABLE YNA.PARAMETER_TABLE_GTT CASCADE CONSTRAINTS;

CREATE GLOBAL TEMPORARY TABLE YNA.PARAMETER_TABLE_GTT
(
  NUMBER_ALAN1  NUMBER
)
ON COMMIT DELETE ROWS
RESULT_CACHE (MODE DEFAULT)
NOCACHE;

GRANT DELETE, INSERT, SELECT, UPDATE ON YNA.PARAMETER_TABLE_GTT TO ORACLEREADERUSER;


View içinde kullanımı
DH_DA_GOP_SEF_KUMP_DA_VW tablosunda LEFT JOIN veirilmiş bir alt sorgunun içinde kullanılıyor. Bu alt sorgunun (aslında diğer tablolar ile bağlantısını bir alan üzerinden kuramadığımız) sadece istediğimiz parametre için çalışmasını istiyoruz.
..
..
(
..
  FATURA , DH_DA_SEFER_KUMPANYA ,
                             PARAMETER_TABLE_GTT GTT
                       WHERE    
                              DH_DA_SEFER_KUMPANYA.KUMPANYA_ID = GTT.NUMBER_ALAN1


Kod içerisinden çağırımı

            TransactionHelper txnHelper = new TransactionHelper();
            txnHelper.BeginTransaction();
            try
            {
                //txnHelper yaşamı boyunca geçici kayıt (ParameterTableGttEntity) tablosuna bir kayıt atıyor.
                //DhDaGopSefKumpDaVwCollection içinde bu tabloya JOIN atılıyor. View içine parametre geçmek için yazıldı.
                var prmTableGttEntity = new ParameterTableGttEntity();
                txnHelper.AddElementToTransaction(prmTableGttEntity);
                prmTableGttEntity.NumberAlan1 = request.KumpanyaId;
                prmTableGttEntity.Save();
                TypedListBuilder tlb = new TypedListBuilder();
                tlb.addFields(DhDaGopSefKumpDaVwFields.DaGopSeferLokasyonId, DhDaGopSefKumpDaVwFields.DaGopSeferLokasyonId.Name);
                tlb.addFields(DhDaGopSefKumpDaVwFields.DaKumpanyaId, DhDaGopSefKumpDaVwFields.DaKumpanyaId.Name);
                tlb.addFields(DhDaGopSefKumpDaVwFields.DaNo, DhDaGopSefKumpDaVwFields.DaNo.Name);
                
                //Veri çektiğimiz yapıda aynı Transaction'i kullanmalıyız.
                response.DhDaSeferKumpanyaDT = tlb.Fill(filtre, sortExpression, TxnHelper);
                //Tabloya attığımız kayıt bu noktada silindi.
                txnHelper.CommitTransaction();
            }
            catch (Exception)
            {