Aklımda Kalası Kelimeler

* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur
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 Eylül 2015 Pazartesi

zkemkeeper.dll ve Asp.Net uygulaması

Öncelikle biyometrik okuma cihazına bağlanmak için zkemkeeper.dll ve sdk'nın diğer dll dosyalarını registry'e kaydetmelisiniz. Bu aslında com bileşeni olarak sistemin erişebileceği bir id ile windows içinde kaydının oluşturulması demek oluyor. Bunu yapmak için zksoftware içinde gelen bat dosyasını çalıştırmanız yeterli.
copy .\sdk\*.dll %windir%\system32\
regsvr32 %windir%\system32\zkemkeeper.dll

Buna göre sdk içindeki tüm dll dosyalarını C:\Windows\system32 dizinine kopyalayıp zkemkeeper.dll dosyasını da registry'ye kaydetmiş oluyoruz. zkemkeper.dll için bir uygulama idsi oluşturdu {FE9D.....32C7} diye ve bunu da {00853....61F} ile çağırabilir bir DCOM objesi olarak sisteme kaydetti.

Normal olarak demo uygulamalarını bu kayıt işlemi yapılmadan önce çalıştırdığımda şu hatayı alıyordum: FAE has stopped working

DLL register edildikten sonra uygulama çalışıyor ve biyometrik cihazlara bağlantı sağlıyordu ama başka makinelerde aldığım bir sorunun ekran görüntüsünü şöyle alıyordum:

Bu hatayı elde etmek için program FAE hatası almasın diye dll register ettim ve uygulama açıldıktan sonra unregister ederek bağlanmayı deneyince ekrandaki Error mesajını aldım. Bu mesaj biyometrik cihazın çeşitli hata seviyelerinden(sanırım 6-7 tane var) biri. Maksadım bunu gördüğünüzde neden olduğunu bir nebze anlamanızı sağlamak.

Şimdi "happy path"(mutluluğa giden keçi yoluna bakalım :) )
Dll kaydedildi ve demo uygulamasıyla cihaza bağlanalım:

ASP.NET uygulamamda ise şu hataları alıyordum:
  1. Class not registered diyerek CZKEMClass'tan bir nesne yaratmama müsade etmiyordu
  2. Başka bir makinede ise nesne yaratıyor ama aktif cihazlara peş peşe bağlantı sağla dediğimde sorun çıkartmazken, pasif bir cihaza bağlan dediğimde bir sonraki aktif cihaza bağlantı sağlamayı denemeden cihaza ulaşılamadı diyordu

1. Madde için aldığım sorunu göstereyim:
Retrieving the COM class factory for component with CLSID {00853A19-BD51-419B-9269-2DABE57EB61F} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

2. Madde için ekran görüntüsünü yaratamıyorum ama ikisinin çözümünü nerede bulduğumun ekranını paylaşayım:
IIS Express'in 64 bit versiyonunu çalışmaya zorlayınca dll'lerin register edildiği versiyona erişmesini sağlamış oldum. Çünkü zkemkeeper.dll'i kaydetmek istediğinizde 32/64 bit seçeneklerinden eğer 64 bitlik sistem üstünde koşuyorsanız 32 liğini yükleyemiyorsunuz(klasör adı "Communication Protocol SDK(32Bit Ver6.2.4.1)" olanı yükleyemiyorsunuz çünkü içeriğindeki zkemkeeper.dll 32 uyumlu değil).
Ancak Communication Protocol SDK(64Bit Ver6.2.4.1) klasöründeki zkemkeeper.dll dosyasını sisteme kaydedebiliyorsunuz. Bu durumda ASP.NET uygulamanızın IIS Express versiyonununda 64 bit olması için zorlamanız gerekiyor.

Ve tekrar çalıştırdığımda uygulamamı:

9 Eylül 2014 Salı

Powershell ile dosya kopyalama

Niyetim SAP nin xml olarak attığı uzak sunucu dosyalarını iis sunucusuna almak
Powershell dosyası şöyle:

$source =  "C:\Temp\"
$dest = "C:\Temp\Dest\"
$kopyalanacakDosyalar = "*.xml"

Write-Host  "Kaynak Dizin => " $source
Write-Host  "Hedef Dizin => " $dest
Write-Host  "Kopyalanacak Dosyalar => " $kopyalanacakDosyalar

$TestPath = Test-Path $dest
IF (!$TestPath) {
 
 Write-Host "Hedef dizin mevcut degil"
 Copy-Item $source $dest -Verbose
 PC1 - no file found. Copying

} ELSE {

 Write-Host "Hedef mevcut dosyalar taranarak hedefte olmayan kopyalanacak"
 
 $files = (Get-ChildItem $source -recurse -filter $kopyalanacakDosyalar | where-object {-not ($_.PSIsContainer) -AND $_.lastwritetime -gt (get-date).addminutes(-10)});
 
 $files|foreach($_){
  if (!([system.io.file]::Exists($dest+$_.name))){
            cp $_.Fullname ($dest+$_.name)
  };
 }
}

7 Eylül 2014 Pazar

httpCompression Asp.net ve IIS Gzip Deflate

Ozenemiyorum ama bulduğum kaynaklar:

1 Şubat 2011 Salı

Bir IIS sunucudan diğerine kopyalamak

Web Deploy (MSDeploy) how to sync a folder

IIS üstündeki virtual directory ve web site ları tek satır komut ile bir başka sunucuya aktarmak.
C:\>iiscnfg /copy /ts webclusternode1 /tu FRESENIUS_IST\administrator /tp sifRedeGir
Backing up server 127.0.0.1
Backup complete.
Mapping local drive E: to admin share on server 127.0.0.1
Mapping local drive F: to admin share on server webclusternode1
Copying backup files...
cmd /c copy /Y E:\system32\inetsrv\metaback\iisreplback.* F:\system32\inetsrv\me
taback
Unmapping local drive E:
Restoring on server webclusternode1
Restore complete.
Unmapping local drive F:
Copy operation complete.

C:\>

IIS6'dan IIS7 ye göç

Ref: http://www.iis.net/learn/publish/using-web-deploy/synchronize-iis-60-web-sites

Yukarıdaki referansa göre önce tüm klasörleri ziple:
msdeploy -verb:sync -source:metakey=lm/w3svc/1 -dest:package=c:\Site1.zip

sonra bu zipi öteki makineye kopyala.
Bir simülasyon yapmak için -whatif > logAdi.log anahtarına benzer bir ekle:
msdeploy -verb:sync -source:package=c:\Site1.zip -dest:metakey=lm/w3svc/1 -whatif > msdeploysync.log
çalıştırır ve "C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploysync.log" açılarak durumuna bakılır.

Kontrol edelim:

Sorun var.Olmasaydı

Eğer sağlam bir şekilde açılmışsa bunu kalıcı olarak yapmak için:
msdeploy -verb:sync -source:package=c:\Site1.zip -dest:metakey=lm/w3svc/1 > msdeploysync.log
yapacaktık.

Sorunumuz Application Pool'ların aktarımıyla ilgili. Bakalım çözmek için ne yapabiliriz.

Evet şu adres: MSDEPLOY – Can I use it to migrate my IIS6 to another IIS6? oh yes!

Buna göre önce Application Pool lar için aşağıdaki komutla yedekleyelim:
C:\Program Files\IIS\Microsoft Web Deploy>msdeploy -verb:sync  -source:metakey=lm/w3svc/AppPools -dest:archivedir=c:\AppPoolConfig



AppPoolConfig klasörü C:\> dizini içinde oluşacak. Bu dizini hedef sunucudada aşağıdaki kodu çalıştırıp Application Pool'ları oluştururuz.Dikkat: Varsa önceki poollar silinmiş olacak!
C:\Program Files\IIS\Microsoft Web Deploy>msdeploy -verb:sync  -source:archivedir=c:\AppPoolConfig, -dest:metakey=lm/w3svc/AppPools

Artık c:\Site1.zip dosyamızı yeni IIS sunucumuzda geri yükleyebiliriz:
C:\Program Files (x86)\IIS\Microsoft Web Deploy V3>msdeploy -verb:sync -source:m
etakey=/lm/w3svc/1,computername=10.130.214.67,username=administrator,password=sifreBuMakine -dest:metakey=/lm/w3svc/3,computername=10.130.214.205,username=administrator,password=sifreOlsun -replace:objectName=metaproperty,match="wwwroot",replace="wwwroot\101"

Azıcık inceleyelim:
msdeploy -verb:sync uygulama tüm içeriği eşleştirecek.

-verb parametresinin alabildiği diğer değerler için Web Deploy Command Line Syntax adresine bakılabilir.

-source ile dosyaların kaynağı olan IIS sunucusunun ya da dosyanın bulunduğu kaynağı işaret edeceğiz.

:metakey= ile kaynağın dosya olmadığını bir IIS işaret ettiğimizi belirtiyoruz.

/lm/w3svc/1, IIS üzerinde ID si 1 olan web site'ı işaret eder.


computername=10.130.214.67, username=administrator, password=sifreBuMakine ID si 1 olan IIS sunucusunun IP, kullanıcı adı ve şifre bilgilerini belirtiyoruz.

Aynı mantığı hedef makine içinde yapıyoruz.

Ek olarak şuna bir bakalım:
-replace: ile hedefte yapılacak değişiklikleri belirtiyoruz.

objectName=metaproperty için yedeklediğimiz zipin içinde archive.xml dosyasından bir kısım gösterelim:

<?xml version="1.0" encoding="utf-8" ?> 
<MSDeploy.metaKey MSDeploy.ObjectResolver.metaKey="Microsoft.Web.Deployment.MetaKeyObjectResolver" MSDeploy.ObjectResolver.metaProperty="Microsoft.Web.Deployment.MetaPropertyObjectResolver" MSDeploy.ObjectResolver.dirPath="Microsoft.Web.Deployment.DirPathObjectResolver" MSDeploy.ObjectResolver.filePath="Microsoft.Web.Deployment.FilePathObjectResolver">
<metaKey path="/lm/w3svc/1" MSDeploy.path="2" setProperties="1015,1017,1018,1099,1012,1016,9101,6006,1002,4011,1023" MSDeploy.setProperties="1" MSDeploy.MSDeployLinkName="Child1" MSDeploy.MSDeployKeyAttributeName="path" MSDeploy.MSDeployProviderOptions="H4sIAAAAAAAEAOy9B2AcSZYlJi9tynt/SvVK1B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9fB8/In6NX/PXDVjf/7//6//2/8xP9o1/r1/g1fo3vfVFM66qpztvxVT4Zz/JVWV0v8mU7Sn8yr5uiWn72YLw73hnvjNKTddmu6/yzZb5u66wcpS/Xk7KY/l759Zvqbb787N7u5Pzewf1Ps9m9T/fze/d/XfS05zr4LnXw1Hbg/fqyri6LWV5/uWqpwbXTVjV/jN1rpZyyRf7rrLJ2/usus0Xe/HqXWbnOm1/z1/z1fj2g/v92r/Gr/Fr/PqLvM1r/z618OLSbm4e3WvuZze3f2xX/fXDVjR/79X6NXPXM3xG/73mMv/O83/H8CAAD//7UD9MUPAQAA">
<metaProperty name="ServerComment" propertyId="1015" attributes="Inherit" userType="1" dataType="String" value="Default Web Site" MSDeploy.value="8" MSDeploy.MSDeployKeyAttributeName="name">
<rootWebConfig32 path="Default Web Site" MSDeploy.path="2" version="4.0" MSDeploy.version="2" MSDeploy.MSDeployLinkName="Microsoft.Web.Deployment.FrameworkConfigExtensionRootWebConfig32" MSDeploy.MSDeployKeyAttributeName="path" MSDeploy.MSDeployProviderOptions="H4sIAAAAAAAEAOy9B2AcSZYlJi9tynt/SvVK1B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9fB8/In6NX/PXDVjf/7//6//2/8xP9o1/r1/g1fo3vfVFM66qpztvxVT4Zz/JVWV0v8mU7Sn8yr5uiWn72YLw73hnvjNKTddmu6/yzZb5u66wcpS/Xk7KY/l759Zvqbb787N7u5Pzewf1Ps9m9T/fze/d/XfS05zr4LnXw1Hbg/fqyri6LWV5/uWqpwbXTVjV/jN1rpZyyRf7rrLJ2/usus0Xe/HqXWbnOm1/z1/z1fj2g/v92r/Gr/Fr/KZ1VbUE/KRanhcX9/ZPQD4zZ7m5xkhnNIX6euizX/s1/01fo1f48dvV/j1/g1fnP8hv/95vgL//sN/58AAAD//zNOiHsdAQAA" /> 
<machineConfig32 path="Default Web Site" MSDeploy.path="2" version="4.0" MSDeploy.version="2" MSDeploy.MSDeployLinkName="Microsoft.Web.Deployment.FrameworkConfigExtensionMachineConfig32" MSDeploy.MSDeployKeyAttributeName="path" MSDeploy.MSDeployProviderOptions="H4sIAAAAAAAEAOy9B2AcSZYlJi9tynt/SvVK1B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9fB8/In6NX/PXDVjf/7//6//2/8xP9o1/r1/g1fo3vfVFM66qpztvxVT4Zz/JVWV0v8mU7Sn8yr5uiWn72YLw73hnvjNKTddmu6/yzZb5u66wcpS/Xk7KY/l759Zvqbb787N7u5Pzewf1Ps9m9T/fze/d/XfS05zr4LnXw1Hbg/fqyri6LWV5/uWqpwbXTVjV/jN1rpZyyRf7rrLJ2/usus0Xe/HqXWbnOm1/z1/z1fj2g/v92r/Gr/Fr/KaLbDovlvlJtTwvLu7t/XoA8Js9zc8zQjilXtPXRZv/2K/7a/wav8aP/Xq/xq/xa/zmA3/83xF/73G/4/AQAA//8OZme7HQEAAA==" /> 
</metaProperty>
<metaProperty name="ServerAutoStart" propertyId="1017" attributes="None" userType="1" dataType="DWord" value="1" MSDeploy.value="8" MSDeploy.MSDeployKeyAttributeName="name" /> 
<metaProperty name="ServerSize" propertyId="1018" attributes="Inherit" userType="1" dataType="DWord" value="1" MSDeploy.value="8" MSDeploy.MSDeployKeyAttributeName="name" /> 
<metaProperty name="Win32Error" propertyId="1099" attributes="Volatile" userType="1" dataType="DWord" value="0" MSDeploy.value="9" MSDeploy.MSDeployKeyAttributeName="name" /> 
<metaProperty name="ServerCommand" propertyId="1012" attributes="Volatile" userType="1" dataType="DWord" value="1" MSDeploy.value="9" MSDeploy.MSDeployKeyAttributeName="name" /> 
<metaProperty name="ServerState" propertyId="1016" attributes="Volatile" userType="1" dataType="DWord" value="2" MSDeploy.value="9" MSDeploy.MSDeployKeyAttributeName="name" /> 
<metaProperty name="AppPoolId" propertyId="9101" attributes="Inherit" userType="1" dataType="String" value="DefaultAppPool" MSDeploy.value="8" MSDeploy.MSDeployKeyAttributeName="name" /> 
<metaProperty name="DefaultDoc" propertyId="6006" attributes="Inherit" userType="2" dataType="String" value="Default.aspx,Default.htm,Default.asp,index.htm,iisstart.htm" MSDeploy.value="8" MSDeploy.MSDeployKeyAttributeName="name" /> 


Yukarıdaki blokta metaProperty anahtarının değerlerinde bir regular expression çalıştırıp ,match="wwwroot" wwwroot kelimelerini ,replace="wwwroot\101" "wwwroot\101" ile değiştireceğiz. Böylece hedef sunucuda yeni klasörümüz c:\inetpub\wwwroot\101 olarak belirlenmiş olacak.

Dosya Eşleştirme

msdeploy.exe –verb:sync -source:contentPath="C:\temp\files-to-pub" -dest:contentPath='sayedupdemo/files'

msdeploy.exe 
    -verb:sync
    -source:contentPath="C:\temp\files-to-pub" 
    -dest:auto
        ,ComputerName="https://waws-prod-blu-001.publish.azurewebsites.windows.net/msdeploy.axd?site=sayedupdemo"
        ,UserName='$sayedupdemo'
        ,Password='thisIsNotMyRealPassword'
        ,AuthType='Basic' 
-enableRule:DoNotDeleteRule 
-setParam:value='sayedupdemo',kind=ProviderPath,scope=contentPath,match='^C:\\temp\\files-to-pub$'