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)
            {

15 Kasım 2013 Cuma

ORA-02293 NOT NULL CHECK CONSTRAINT

Belli bir tarihten sonrası NOT NULL, belli bir tarihten öncesi NULL olarak yaşamına devam edecek kolonlar için ALTER TABLE MUSTERI ADD CHECK ("ULKE_LOKASYON_ID" IS NOT NULL); şeklindeki notasyon ihtiyaca cevap vermiyor. Bu notasyon kolonun tamamını NOT NULL'a çeker. Column description ekranında NULL? Bölümünde N gösterir. (eğer başarılı çalışırsa)
 
Bizim ihtiyacımıza cevap veren notasyon ALTER TABLE MUSTERI ADD (  CHECK ("ULKE_LOKASYON_ID" IS NOT NULL)  ENABLE NOVALIDATE); Bu durumda column description ekranındaki NULL? Bölümü Y gösterse de hayatına NOT NULL olarak devam eder, eski kayıtları NOT NULL'a zorlamaz.

24 Eylül 2013 Salı

asp.net mvc bundle 403 hatası

Merhaba,
Asp.Net MVC uygulamalarımızda bundle kullandığımız zaman, bundle ismi fiziksel bir path ile aynı olursa css veya js isteklerine 403 forbidden cevabı dönüyor.
Bunun sebebi ilk olarak IIS handler’ların çalışması ve fiziksel dizine isteğin yönlendirilmesi.
Çözüm basit;
bundle ismini değiştirin (önerilen) veya aşağıdaki alıntıda yer alan B maddesini uygulayın. İstekleri .Net karşılasın.
This issue is by default .NET does not "process" requests that have a .js or .css extension.
There are two fixes for this (you only need to do ONE)
A) Remove the extensions from the bundle names. (recommended) This will cause .NET to process the request and run it through the BundleModule.
B) Add this to your web.config in the 
system.webServer section which will cause .NET to run .js and .css requests through the BundleModule.
<modules runAllManagedModulesForAllRequests=
"true">
 <remove name="BundleModule" />
 <add name="BundleModule" type="System.Web.Optimization.BundleModule" />
</
modules>
Big shout out to Ray Moro who figured out the actual cause and shared it with me on my blog:http://blog.cdeutsch.com/2012/11/fixing-404-errors-for-aspnet-mvc-apps.html
 

18 Eylül 2013 Çarşamba

Asp.Net 4.5 Kurulumu Ardından Ajax Isteklerinde Yaşanan Bir Hata

Merhaba,

 

Web sunucularimiza .Net Framework 4.5 kurduktan sonra ilginc bir problem yasamaya basladik.

Bazi IE9 ve alti kullanan userlarin browserlarinda kitlenmeler olustu. Ayni senaryoyu farkli bowserlar ile denedikleri zaman sıkıntı yasamadilar (chrome, IE10 gibi).

Konuyu arastırdigimizda sorunumuza en uygun asagidaki linke ulastık.

 

http://stackoverflow.com/questions/15437524/managedpipelinehandler-for-an-ajax-post-crashes-if-an-ie9-user-navigates-away-fr

 

Yine bu linkte yer alan asagidaki cozumu uyguladik ve hata tekrar yasanmadi.

<system.webServer>
<serverRuntime uploadReadAheadSize="0" />
</system.webServer>


How to set the uploadReadAheadSize in IIS 7.5

  1. Launch "Internet Information Services (IIS) Manager"
  2. Expand the Server field
  3. Expand Sites
  4. Select the site you want to make the modification for.
  5. In the Features section, double click "Configuration Editor"
  6. Under "Section" select: system.webServer>serverRuntime
  7. Modify the "uploadReadAheadSize" section
  8. Click Apply

 

4.5 icin bu tip sorunlari cozen bir fix/patch var mi diye arastirdigimizda;

 

Download yapilamayan bir hotfix rollup;

http://support.microsoft.com/kb/2828841/en-us

 

Bir update paketi;

http://www.microsoft.com/en-us/download/details.aspx?id=36359

 

ve asagidaki bilgilerle (4.5.1 preview);

 

ile karsilastik.

Isterseniz fix’i kurabilir, isterseniz uploadReadAheadSize değerini değiştirip devam edebilirsiniz.

 

Serkan

16 Ağustos 2013 Cuma

WCF Servislerinde Unity Kullanımı

WCF servislerinizde Unity veya farklı bir Dependency Injection Framework’u kullanmak istiyorsanız aşağıdaki makale oldukça yardımcı.
Kendimize özel ServiceHostFactory oluşturup register işlemlerini istediğimiz gibi yapabiliyoruz.
 
 
Dikkat edilmesi gereken önemli bir not:
** WcfHostClient.exe üzerinden host işlemi yapıyorsanız (development ortamında) kendinize özel ServiceHostFactory’i kullanamıyorsunuz. Bunu aşmak için WebHost isimli bir proje yaratın ve svc dosyanızı yaratın.
Svc dosyada aşağıdaki gibi Factory tanımı yapın. Bu projeyi hem development ortamında, hem de devreye alımlarda kullanabilirsiniz.
 
<%@ ServiceHost Service="Service.Wcf.Service1" Factory="Service.Wcf.MyServiceHostFactory"%>
 
Serkan

13 Mart 2013 Çarşamba

Init Metodunda ViewState Kullanımı

Merhaba

 

Asp.Net uygulamalarında, Controllerin Init metotlarında atama yapılan ViewState değerleri saklanmaz.

ViewState değişimleri InitCompleted işleminde izlenir duruma gelmektedir.

Eğer Init metodunda ViewState ataması yapmak zorundayım derseniz, öncelikle TrackViewState() metodunu çalıştırmanız gerekir.

Dikkat etmeniz gereken bir nokta; Init metodu içerisinde ViewState içerisinde saklanan değerleri okuyamazsınız.

 

Serkan

7 Mart 2013 Perşembe

debug=true'lardan kurtulmanın kökten çözümü

Machine.config dosyasında aşağıdaki gibi belirtirseniz,
deploylarda web.config debug=true mu gitti diye düşünmek zorunda kalmazsınız:

<configuration>
    <system.web>
          <deployment retail=”true”/>
    </system.web>
</configuration>

debug=true dersek ne olur?

1) Sayfaların derlemesi daha uzun sürer
2) Kodlar daha yavaş çalışır
3) Uygulama daha fazla bellek kullanır
4) WebResources.axd'den download edilen script ve resimler önbelleğe alınmazlar ve her istekte tekrar download edilir.

14 Şubat 2013 Perşembe

Visual Studio 2010 Test Projesi Test List Kısmında Değişiklikler Görünmüyorsa

 
Visual studio 2010 Tools/Options’ı açalım.
 
Test Tools/Test Project e tıklayalım, sağ tarafta yer alan “disable background discovery of test methods” kısmındaki check’i kaldırın, sorun düzelsin.
 
 
 
 

26 Kasım 2012 Pazartesi

TFS Boyut Yönetimi

Selamlar,
Tfs sunucunuzun boyutu 10larca Gb haline geldiyse temizlik için aşağıdaki maddeleri incelemenizi tavsiye ederim.
    Build icin yazilan joblar’ da retention policy ayarı.
Test, development ortamlarında cok gerekli degilse tarihce tutmayın. Canli ortam icin Keep All demeyin. Son 20 gun gibi yonetilebilir rakamlar belirleyin.

Build tanımlarinda sag click yapip edit build definition’a tıklanır. Acilan pencerede retention policy kısmında bahsettigim ayarlamalar yapılabilir.
   Tfs Default Collection Silinen Dosyalar/Projeler.
Tfs silinen bir dosyayi veya dizini gercekten silmiyor. Visual Studio Tools/Options kısmında yer alan Source Control ayarlarinda silinenleri goster kısmını sectigim zaman korkunc gercekle karsilastim. Onlarca proje muhtemelen isim degisikligi gordugunden veya baska bir yere tasindigindan dolayı silinmis. Bunlar database’te yer tutmaya devam ediyor.
Soyle bir goruntuyle karsilasirsaniz hemen mudahale edin.


Kalıcı olarak silmenin tek yontemi tf destroy komutu.
Komutun kullanimi su sekilde:
tf destroy $/”[TFS uzerindeki path]”  /collection:[Tfs adresi http://localhost:8080/tfs/defaultcollection] /startcleanup /keephistory /stopat:T

- Komut tfs kurulum dizinine konumlanildigi zaman calisiyor.
- Tfs uzerindeki path i ogrenmek icin klasorun uzerinde sag click ile properties’e basilir, $ ile baslayan path alinir.
- startcleanup yazilmadigi taktirde silme islemi scheduled job’a birakiliyor. Yazilirsa temizlik hemen basliyor.
- keephistory ve stopat:T ikilisi son versiyonun saklanmasini sagliyor. Digerleri siliniyor. Silinmis dosyalari detroy yaparken bunu eklemeye gerek yok. stopat yerine belirli bir tarih girilebiliyor (son 1 haftalık versiyonlari sakla kisminda isinize yarayabilir)
- tf destroy komutu ile ilgili detayli bilgi asagidaki linkten alinabilir.
http://msdn.microsoft.com/en-us/library/bb386005(v=vs.100).aspx
   Buyuk boyutlu dosyalar.
Tfs 16 mb’dan buyuk binary dosyalari versiyonlamiyor. Her degisimde eskisini ve yenisini ayrı satır olarak saklıyor.
Bu dosyalari tf destroy komutu ile temizleyin. Dll versiyonlari saklamaniz gerekiyorsa 1 haftayı gecmeyin.
Bu islemleri canlı sistemde denemeden once mutlaka test ortamı yaratın.
Canlidan verileri backup ile alıp test ortamında restore yapabilirsiniz. Su makaledeki adımları uygulayabilirsiniz.
İyi çalışmalar

23 Ağustos 2012 Perşembe

Radwindow VisibleOnPageLoad

Selamlar

RadWindow kullanımında dikkat edilmesi gereken onemli bir nokta var.
 
RadWindow’un gosterilmesini istedigimiz zaman VisibleOnPageLoad property’sini true olarak set edebiliyoruz.
Ancak bu degeri false’a geri cekmedigimiz zaman Postback’lerde Radwindow tekrar tekrar aciliyor (Ajax postbacklerde sorun olmuyor).
 
Konuyla ilgili 2 cozum var:
      VisibleOnPageLoad= false atamasini uygun zamanda yapmak.
      RadWindow acma islemini javascript ile yapmak.
Ornek:
   ScriptManager.RegisterStartupScript(this,this.GetType(), "key", "Sys.Application.add_load(showWindow);", true);

   <script type="text/javascript">
        function showWindow() {
            Sys.Application.remove_load(showWindow);
            var oWindowCust = $find('<%= RadWindow1.ClientID %>');
            oWindowCust.show();
        }  
    </script>
 
Bilginize
 
Serkan
 

17 Ağustos 2012 Cuma

Çok Sayfalı Raporlarda Performans Problemi

Selamlar,
Bizi baya uğraştıran bir hata hakkında kısaca bilgi verelim.

Uygulamamızda kullanılan bir raporun, tüm gemi bazında alınmaya çalışıldığı taktirde çok uzun sürdüğüne dair bir hata kaydımız vardı.
  • Öncelikle raporun yapısını ve sql’lerini inceledik ancak bir sonuca varamadık.
  • Sonrasında raporun ihtiyaç duyduğu tabloları dolduran, rapora parametre geçen kısımları didikledik, yine bir sonuca varamadık.
  • İşin ilginç yanı; Uygulamadan raporu çektğimizde gerçekten çok yavaş, ancak reporting service üzerinden aynı parametrelerle aynı işlemi yaptığımızda çok hızlı sonuç alıyorduk. Hatta reporting service logları da gayet temiz görünüyordu.
Bu işi bir de Mozilla’da deneyelim dedik ve ilk denememizde yüklü javascript gelmesinden dolayı IE’ın crash olduğunu anladık. Aslında rapor gayet hızlı çalışıyor, sonucu dönüyor ancak client’taki browser kendinden geçiyordu.
Toplam 173 sayfalık bir datayı render etmeye çalıştığından bu sorunun oluşması normal dedik ve rapora paging ekleyip konuyu kapattık J

6 Ağustos 2012 Pazartesi

Page, UserControl LifeCycle ve Veri Doldurma İşlemleri

Selamlar,

Asp.Net uygulaması geliştiren birçok developer mutlaka page ve user life cycle’larla ilgili bir dokuman, makale veya forum entry’leri okumuştur.

User control içerisinde yer alan dropdown list’e SelectedValue ataması yaparken, atamaya çalışılan nesne Items içerisinde yer almıyor hatası ile hemen hemen hepimiz karşılaşmısızdır.

 

Bu tarz hataları azaltmak ve developer’ın çözüm bulmakla vakit kaybetmesini engellemek için Bimar içerisinde geliştirdiğimiz projelerde temel prensiplerimiz şunlardır.

 

1)      Sayfada basit bir dropdownlist var.

a.       Sayfanın load metodunda dropdownlist itemlar doldurulur. Doldurma işlemi !IsPostBack if bloğu içerisinde yapılmalıdır. Böylelikle her postback’te gereksiz işlem yapılmaz.

b.      Itemlar doldurulduktan sonra istenirse selectedvalue set edilir.

2)      User control içerisinde dropdownlist var ve bu kontrol sayfada kullanılıyor (örnek kullanıcı seçim user controlu)

a.       User controlun init metodunda dropdownlist itemlar doldurulur. Doldurma işlemi !IsPostBack if bloğu içerisinde yapılmalıdır. Böylelikle her postback’te gereksiz işlem yapılmaz.

b.      Sayfanın load metodunda, istenirse usercontrol içerisindeki dropdown’ın selected value’su set edilir.

User controlun init metodu Page’in load metodundan önce, load metodu ise Page’in load metodundan sonra çalışır.

3)      User control içerisinde load on demand control (radcombo, autocomplete extender textbox vb. ) var ve bu kontrol sayfada kullanılıyor.

a.       User controlun init metodunda herhangi bir doldurma işlemi yapmaya gerek yok.

b.      Sayfa ilk açıldığı zaman bu kontrolde bir değer gösterilmek isteniyorsa, usercontrol’e ilgili PK değerini alan ve datayı saklandığı yerden getirip ekrana basan bir metot yazılmalı.

 

Biz bu işlemleri daha anlamlı metotlarda görebilmek için base classlar oluşturduk (Page ve UserControl’lerin). Bunların Load metotlarını override yaptık ve içerisinden ilgili metotların virtual signature’a sahip olanlarını çağırdık. Virtual metotların içlerini child Page ve UserControl’lerde doldurduk. Böylelikle developer’ın IsPostBack gibi kontrolleri yapmadan kod yazmasını sağladık.

 

İyi çalışmalar

 

Serkan

3 Ağustos 2012 Cuma

IIS'e WCF Servis Deploy'unda BaseAddress

Selamlar,

Bildiğiniz gibi WCF servislerini farklı ortamlarda host edebilirsiniz.
Biz şirket içinde yazdığımız wcf servisleri genelde IIS sunucularında yayınlıyoruz.
Hemen hemen her devreye alımda da endpoint’lerin URI’ları konusunda sorunlar yaşıyoruz J

Burada bilinmesi ve dikkat edilmesi gereken en önemli nokta; IIS servisin svc dosyasını base olarak kabul etmektedir.
Dolayısıyla web.config dosyasına baseaddress eklememeliyiz.
Örnek servis ve client configleri ile konu daha iyi anlaşılacaktır.

Hem netTcp hem de basicHttp binding destekleyen bir servisimiz olsun.
IIS’te basicHttp için 8018, netTcp için 8019 portlarını ayarladık. Svc dosyamızın ismi DistributedService.Wcf.ScheduledJobsService.svc şeklinde ve herhangi bir sub folder’ın altında değil.
Birden fazla endPoint tanımladığımız için bunların relative adreslerini de belirtmemiz gerekiyor. netTcp için address kısmına netTcpAdres diye bir giriş yaptım. Servis referans olarak eklenebilmesi için mexTcpBinding eklendi ve ona da özel bir adres atandı (mexTcpAdres).

<system.serviceModel>
    <services>
      <service behaviorConfiguration="Basic_Service_Behavior" name="DistributedService.Wcf.ScheduledJobsService">
        <endpoint address="netTcpAdres" binding="netTcpBinding" bindingConfiguration="ScheduledJobsServiceBinding" contract="DistributedService.Contracts.Interfaces.IScheduledJobsService"/>
        <endpoint address="mexTcpAdres" binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange"/>
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="ScheduledJobsServiceBindingHttp" contract="DistributedService.Contracts.Interfaces.IScheduledJobsService"/>
        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Basic_Service_Behavior">
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <serviceMetadata/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <netTcpBinding>
        <binding name="ScheduledJobsServiceBinding" maxReceivedMessageSize="900000000" receiveTimeout="00:15:00" sendTimeout="00:15:00">
          <reliableSession inactivityTimeout="15:00:00"/>
        </binding>
      </netTcpBinding>
      <basicHttpBinding>
        <binding name="ScheduledJobsServiceBindingHttp" maxReceivedMessageSize="900000000" receiveTimeout="00:15:00" sendTimeout="00:15:00"/>
      </basicHttpBinding>
    </bindings>
</system.serviceModel>

Visual Studio’da bir test projesi yarattık ve service referans olarak ekleme yaptık.
Oluşan config dosyası şu şekilde:
<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IScheduledJobsService" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
          maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
          messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
          useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
      <netTcpBinding>
        <binding name="NetTcpBinding_IScheduledJobsService" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
          hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288"
          maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="Transport">
            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
            <message clientCredentialType="Windows" />
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
    <client>
      <endpoint address="net.tcp://testapp.bimar.com:8019/DistributedService.Wcf.ScheduledJobsService.svc/netTcpAdres"
        binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IScheduledJobsService"
        contract="ServiceReference1.IScheduledJobsService" name="NetTcpBinding_IScheduledJobsService">
        <identity>
          <servicePrincipalName value="host/ testapp.bimar.com" />
        </identity>
      </endpoint>
      <endpoint address="http:// testapp.bimar.com:8018/DistributedService.Wcf.ScheduledJobsService.svc"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IScheduledJobsService"
        contract="ServiceReference1.IScheduledJobsService" name="BasicHttpBinding_IScheduledJobsService" />
    </client>
  </system.serviceModel>

Renkli kısımlarda gördüğünüz gibi;
Baseadress olarak svc dosyası görünüyor. BasicHttp için özel bir adres vermemiştik. netTcp için verdiğimiz özel adres (netTcpAdres) base adrese eklenmiş durumda.

Konuyla ilgili aşağıdaki linkleri de inceleyebilirsiniz.



İyi Çalışmalar

Serkan