IIS etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
IIS etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

14 Ekim 2014 Salı

worker process'in process id'sini bulmak için

 
C:\Windows\System32\inetsrv> 

Dizininde
 
 > appcmd list wps
 
Komutunu çalıştırmalısınız.

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

14 Ekim 2011 Cuma

Sharepointte “Exception of type 'System.OutOfMemoryException' was thrown.” şeklinde bir hata aldığınızda, sharepointin çalıştığı application pool’ un worker process sayısını arttırarak çözüm sağlayabilirsiniz.

Sharepointin çalıştığı sunucuda IIS Manager’ ı açıp, application pool’ un özelliklerinden, Performance sekmesinde gerekli ayarı yapabiliriz.

Microsoft KB: http://support.microsoft.com/kb/823547/en-us

Configuring Web Gardens with IIS 6.0 : http://technet.microsoft.com/en-us/library/cc784869(WS.10).aspx

30 Haziran 2011 Perşembe

IIS compression ayarları

IIS’te iki çeşit sıkıştırma mevcut: Static ve dynamic. Static sıkıştırma css dosyası gibi değişmeyen dosyalar için default 9 olarak belirtilmiş, yani maximum sıkıştırma. Çünkü bu tür dosyalar sunucu tarafında bir kez sıkıştırılıyor ve herkese bu sıkıştırılmış hali gönderiliyor. Dinamik sıkıştırmada ise durum farklı. Default değer 0 olarak belirtilmiş, yani az sıkıştır ama en kısa sürede sıkıştır denmiş. Dinamik sayfalar için en uygun sıkıştırma seviyesinin ne olacağı konusunda internette yaptığım araştırmaya göre bu seviyenin 3,5 ile 4 arasında olması en uygun görünüyor. Küsuratlı rakamlar kabul edilmediği için dinamik sıkıştırma için en uygun seviye 4 diyebiliriz. Bu durumda web server’in cpu’suna sıkıştırmadan kaynaklanan yükün yaklaşık %10’u kadar ek bir yük gelecek fakat sayfa boyutları eskisine göre %40’lara varan oranda azalacaktır. Kendi makinemde yaptığım testlerde sıkıştırma seviyesi 0 iken 288 Kb olan bir sayfa, bu seviyenin 4’e çıkarılması ile 181 Kb’a düştü. Dinamik sıkıştırma seviyesini aşağıdaki komutla değiştirebilirsiniz:

 

C:\Windows\System32\Inetsrv\Appcmd.exe set config -section:httpCompression -[name='gzip'].staticCompressionLevel:9 -[name='gzip'].dynamicCompressionLevel:4

 

IIS 7.5 classic mode performans ayarları

IIS 7.5'de classic mod kullanımında IIS 6 için geçerli olan default değerler kullanılmaktadır. Böyle bir durumda Microsoft'un, web uygulamalarının performansını arttırmak, beklemeleri önlemek amacıyla önerdiği birkaç değişiklik gerçekleştirilebilir.

 

Default değerler

    <connectionManagement>

       <add address="*" maxconnection="2" />

   </connectionManagement>

    <httpRuntime minFreeThreads="8" minLocalRequestFreeThreads="4" ... />

    <processModel maxWorkerThreads="20" maxIoThreads="20" "  minWorkerThreads="1" minIoThreads="1"   ... />

 

Yeni değerler

    <connectionManagement>

        <add address="*" maxconnection="48" />

     </connectionManagement>

     <httpRuntime minFreeThreads="352" minLocalRequestFreeThreads="304" ... />

     <processModel maxWorkerThreads="100" maxIoThreads="100"  minWorkerThreads="10" minIoThreads="10"  ... />

 

Bu değişiklikler şu anlama geliyor:

 

•             maxconnection: Tek CPU için geçerli değer. Uygulama içinden bir web sayfasına veya web servisine aynı anda en fazla 2 istek gönderilebilir. 4 çekirdekli bir server için aynı anda en fazla 8 istek gönderilebilmesi demek. Entegrasyon ve raporlama gibi sık kullanılan servisler için kısıtlayıcı olabilir. Örneğin hastane uygulamalarında özellikle sabah saatlerinde SGK’dan hastalara provizyon ve takip numarası alırken bu ayar yapılmamışsa uzun kuyruklar oluşacaktır.

•             minworkerthreads ve miniothreads değerlerinin 1 olmasından dolayı gelen istekle birlikte yeni bir threadin oluşturulup ayağa kaldırılması gerekmekte, bu da gecikme anlamına gelmektedir.

•             maxworkerthreads ve maxiothreads'in de 20 olması çok kullanıcılı sistemlerde kuyruğa neden olabilir.

 

Default değerlerin kullanımından kaynaklanan herhangi bir bekleme, kuyruğa alma işlemi varsa bu değişiklikler sonrasında ortadan kalkacak ve CPU aynı anda daha fazla isteğe yanıt verebileceği için CPU kullanım oranı artacaktır. Bu durumda server’e bir kaç çekirdek daha eklenebilir.

 

IIS 7.5 integrated mode

Machine.config dosyasındaki processModel tag’inin önemi ortadan kalkıyor, örneğin maxworkerthread ve maxiothread gibi eskiden 20 olan varsayılan değerler cpu başına 100’e çıkarılmış durumda. Performansı etkileyebilecek yanlış bir default değer ise yine mevcut: maxConcurrentRequestsPerCPU. Bu değer default 12 olarak belirtilmiş. Microsoft’un tavsiyesi bu değerin 5000’e çıkarılması. Neden mi 5000? Okuduğum kadarıyla “büyük bir değer yapalım, ne olsun?” denmiş ve birisi 5000 demiş ve .Net Framework 4.0’da bu değer default 5000 olmuş. .Net Framework 4.0’dan eski bir versiyon kullanıyorsanız, aşağıdaki 12 olan değeri değiştirmeniz faydalı olacaktır.

 

<system.web>

   <applicationPool maxConcurrentRequestsPerCPU="12" maxConcurrentThreadsPerCPU="0" requestQueueLimit="5000"/>

</system.web>