10 Şubat 2015 Salı

C# - TC kimlik sorgulama web servisi client örneğinden COM uyumlu DLL oluşturma ve bunu App.Config dosyası olmadan kullanabilme

Bir makaleden öğrendiğim aşağıdaki direktifle DLL dosyanızın COM uyumlu olmasını sağlarsınız:


[ComVisible(true)] 

Ayrıca projenin özelliklerinde build sekmesinde Register for COM interop checkboxı işaretli olmalı.

Bunun sayesinde de COM nesnesini kullanırken Intellisense kullanabilirsiniz:

[ClassInterface(ClassInterfaceType.AutoDual)] 

 Tüm bunları yaptıktan sonra yine de bu DLL dosyasını direk kullanamazsınız. Kullanmaya kalktığınızda "OLE IDispatch exception code 0 from System.ServiceModel: ServiceModel..." gibi bir hata alırsınız. Ya app.config dosyasını EXEDosyaAdı.EXE.App.Config olarak çağıran programın olduğu klasöre kopyalayacaksınız ya da aşağıdaki kod parçasındaki kırmızı işaretli yerleri ekleyeceksiniz (Bunun için de Paul Mrozowski'den yardım aldım):

Örnekteki TC kimlik servisini C# Class Library türünde oluşturulan projenize eklemek için Service References üzerinde sağ mouse, Add Service Reference-> adres https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx ve GO yapmalısınız.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.ServiceModel;



namespace TCKimlik
{
    [ComVisible(true)] //COM nesnesi olarak görülebilmesini sağlar
    [ClassInterface(ClassInterfaceType.AutoDual)] //COM nesnesi olarak kullanırken intellisense sağlar
    [ProgId("TCKimlik.TCSorgula")] //COM nesne adı
   
    public class TCKimlikClass
    {
        public bool Dogrula(string adi,string soyadi,Int64 tc,Int32 dogumT)
        {
            bool ret = false;

            //------ APP.CONFIG dosyası gerekmemesi için.
            BasicHttpsBinding binding = new BasicHttpsBinding();
            EndpointAddress address = new EndpointAddress("https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx");

            //------ Sorgula --------
                try
            {
                Sorgula.KPSPublicSoapClient servis = new Sorgula.KPSPublicSoapClient(binding, address);

                ret = servis.TCKimlikNoDogrula(tc, adi, soyadi, dogumT);
            }
            catch
            {
            }
            return ret;
        }
    }
}


Artık bu DLL sadece .NET değil, klasik COM DLL destekleyen dillerle de kullanılabilir. Ancak bu DLL dosyasını setup olmadan taşırsanız hedef bilgisayarda regasm ile kaydetmeniz gerekir. Projenin tamamını hazır DLL ile bu ekte paylaştım.

Aşağıdaki örnekte Microsoft Visual Foxpro ile kullanımı var:

o=CREATEOBJECT("tckimlik.tcsorgula")
?o.Dogrula("METİN","EMRE",11111111111,1980)

Güncelleme:
Bazen .DLL dosyasını register ettikten sonra kullanırken "80131509 unknown com status code" hatası alabilirsiniz. Bunun için DLL'yi strong name ile imzalamanız gerekiyor.
Önce Visual Studio içinde zaten var olan SN.EXE ile bir key dosyası oluşturuyoruz:

 sn -k MyKeyFile.snk

Sonra da Visual Studio->İmzalama->Bütünleştirilmiş kodu imzala checkbox'unu seçtikten sonra MyKeyFile.snk dosyasını seçip derleme yapıyoruz.

23 Ocak 2015 Cuma

JAVASCRIPT - 403.14 - Forbidden hatası çözümü

Javascript öğrenmeye niyetlendim ve ilk kodumu çalıştırmaya kalktığımda aldığım hata HTTP Hatası 403.14 - Forbidden..." oldu. Çözümünü bir blogdan buldum. "C:\Program Files\IIS Express" (Sizin bilgisayarınızda farklı bir klasör olabilir) klasörü altında aşağıdaki komutu çalıştırın:

appcmd set config /section:system.webServer/directoryBrowse /enabled:true

2 Ocak 2015 Cuma

SQL SERVER - SA şifresi silindiyse ve kimsede Sysadmin yetkisi yoksa?

SQL Server Configuration Manager içinde ilgili sunucunun özelliklerine girin. Advanced/Gelişmiş tabında Properties/Özellikler alanına "-m" parametresini ekleyin. Ancak bu parametreyi eklerken bir önceki parametrenin sonuna ";" koyun ve hiç boşluk bırakmayın! Yani ";-m" şeklince yazacaksınız (tırnak işaretleri yok).
SQL Sunucuyu yeniden başlatın. Sunucunuz single modda başlayacak.
SQLCMD.EXE dosyasını admin yetkisiyle başlatın. SQL Server'a girmek için kullandığınız Windows kullanıcısına aşağıdaki gibi Sysadmin yetkisi verin:

EXEC sp_addsrvrolemember "myserver\myuser","sysadmin";
GO

ya da

EXEC sp_password NULL, 'newpwd', 'sa';
GO

Eklediğiniz paremetreyi silip sunucunuzu normal modda başlatmayı unutmayın!..

kaynak:
http://blogs.msdn.com/b/raulga/archive/2007/07/12/disaster-recovery-what-to-do-when-the-sa-account-password-is-lost-in-sql-server-2005.aspx

7 Kasım 2014 Cuma

Hangi Ücretsiz Sanal Makine?

Microsoft malesef Windows 8 single için sanal makine seçeneğini kapatmış. Malesef hala Foxpro DOS ile de geliştirmeler yaptığım için XP ihtiyacım oldu. Oracle ve VMware ücretsiz sanal makine seçenekleri sunarken Microsoft bunu single için kaldırarak birilerinin sırf sanal makine için pro geçiş yapacağını sanmış galiba... :)

Önce Oracle VM VirtualBox sanal makinesini denedim. Otomatik kurulma seçeneği yok. Default kurulumda mavi ekran hatası aldım. Daha sonra şimdi hatırlayamadığım bir parametreyi değiştirince hata kalmadı. Host disklerini (Bilgisayarın asıl işletim sisteminin kurulu olduğu diskler) göstermek için aynı Windows sanal makinesindeki gibi bir seçenek sunuyor VirtualBox da. Böylece ana bilgisayarda disk paylaşımı vs.. açıp ona bağlanmak gibi bir sürü teferruatla uğraşmak gerekmiyor. Host disk tanıtımı doğrusu Windows sanal makinesinden daha zordu. Ayrıca Foxpro DOS içinden ana disklere erişirken bazı sorunlar yaşadım ve klasörlerimi sanal makineye kopyalayıp öylece kullanmak zorunda kaldım. Tam ekran modunda VirtualBox menüsünde istediğim seçeneğe erişmekte zorluk yaşadım ve pencere moduna döndüm. Ekran çözünürlüğü konusunda da çok iyi değil VirtualBox. Her istediğim çözünürlüğe ayarlayamadım ekranı. Sağ ve solda boşluklar bırakarak kullanmak zorunda kaldım.

VMware Player, VMware'nin en düşük ve ücretsiz tek versiyonu. XP'nin seri numarasını dahi sorarak tam bir otomatik kurulum sağlıyor. Harika bir kurulumdan sonra ekran çözünürlüğünü ayarlama kısmında beni daha da güzel bir sürpriz bekliyordu. Ekranın sağ altında "Ekran çözünürlüğünün otomatik ayarlanmasını ister misiniz" yazan bir baloncuğu onayladıktan sonra pencereyi nasıl boyutlandırırsam boyutlandırayım VMware sanal makinenin ekran çözünürlüğünü ona göre ayarlıyordu. Host disklerini ayarlama kısmı da tamamen pürüzsüz ve kolaydı.

Eskiden Parallel vardı, iyi bir sanal makineydi.  Ücretsiz değildi. Windows desteği kesilmiş.

Sonuç olarak VMware Player kişisel bilgisayarlar için gördüğüm en iyi sanal makine. Ücretli olsaydı dahi bu kadar iyi olduğunu gördükten sonra alırdım.

2 Ekim 2014 Perşembe

AX 2012 - TC kimlik no sorgulama ile örnek web servisi kullanımı

Bu örneği geliştirirken bir blogdan faydalandım. Kullanıma hazır class halini buradan indirebilirsiniz.

1- Visual Studio'ya girip Class Library tipinde yeni bir C# projesi oluşturun.

2- Proje adındayken sağ klik Add service reference ile Address kısmına https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx?WSDL, Namespace kısmına  Sorgula yazarak GO butonuna basarak servis referansını ekleyin.

3- Projenizi Add to AOT ile AOT'a ekleyin.

4- Projenin properylerine girip

Debug Target = No
Deploy to Client = Yes
Deploy to EP = No
Deploy to Server = Yes
Deploy to SSRS = No 

yapın.

5. Deploy yapıp tüm AX clientleri kapatın. Deploy esnasındaki mesajda tüm clientler kapatılmadıkça deploy işleminin tamamlanmayacağı yazıyor. Sanırım blog yazarı da bu yüzden clientları resetleyin diye uyarıyor.

Bu da benim örnek Jobum:

//Metin Emre, 2.10.2014
static void TCKimlikTest(Args _args)
{
    CLRObject                             clientType;
    TCKimlik.Sorgula.KPSPublicSoapClient  cl;
    System.Exception                      ex;
    boolean                               s,erOccured;
    System.Exception                      e;
    str                                   ret;

    new InteropPermission(InteropKind::ClrInterop).assert();

    try
    {
        clientType = CLRInterop::getType("TCKimlik.Sorgula.KPSPublicSoapClient");
        cl = AifUtil::createServiceClient(clientType);
        s = cl.TCKimlikNoDogrula(11111111111,"METİN","EMRE",1999);
    }
    catch(Exception::CLRError)
    {
        Ex=CLRInterop::getLastException();
        ret = Ex.ToString();
        if (!strScan(ret,"T.C. Kimlik No alanına girdiğiniz değer geçerli bir T.C. Kimlik Numarası değildir",1,strLen(Ret)))
        {
            info(Ex.ToString());
            erOccured = true;
        }
    }
    if (!erOccured)
        info(strFmt("%1",s));
}



29 Eylül 2014 Pazartesi

AX 2012 - R3 Kurulum

Öncelikle minimum sistem gereksinimlerini kontrol edin. MS-SQL kurulumunuzun collate değeri turkish olmamalı. SAP ve Oracle'da da sorun olan meşhur "i" problemi sebebiyle AX kurulumu tamamlandıktan sonra database sync işleminiz patlar.
Kurulum için Microsoft'un uzun ve karmaşık kurulum dökümanı yerine Dilip's Blog'dan faydalandım. AX 2012 kurulumu çok basit veya bana öyle denk geldi.

Öncelikle Active Directory kurulum gerekiyor. Active Directory kurulumu çok basit ve Google'da anlatan çok fazla makale var.

Ben aynen Dilip'in yaptığı gibi SSRS vs.. kurulumları daha sonraya bırakarak temel AX 2012 kurdum. AX 2012 Setup gerekli yazılımların download linklerini veriyor ve yazılımları otomatik konfigüre ediyor. Kurulum esnasında hiç problem yaşamadım.

Daha sonra Microsoft'un demo datayı da yine bir blog sayfasından faydalanarak kurdum. Demo data kurulumu AX 2012 kurulumundan daha zor.

SQL Server SSRS eklentisini kurduktan sonra ayarlarını da yine bir blogdan faydalanarak yaptım. Bu arada SSRS rapor düzenleyebilmek için (Deploy için gerekmiyor) SQL Server Setup ile Business Intelligence Development Studio kurmayı unutmayın. SSRS ayarları oldukça basitti; sırasıyla  Service account, Web service URL, Database, Report Manager URL tablarını varsayılan ayarlarıyla çalıştırmak yeterli oluyor.

Yine başka bir Dilip sayfasından faydalanarak AX 2012 SSRS kurulumunu yaptım. Burda da hiç sorun yaşamadım ve Dilip'in gösterdiği manuel kuruluma ihtiyacım olmadı, raporlarım otomatik deploy oldu.


26 Eylül 2014 Cuma

AX 2012 - Batch joblar bir türlü başlamıyorsa?

Home->Inquiries->Batch jobs->My batch jobs 'a girince jobların başlamadığını görürseniz.

System administration->Setup->System->Server configuration'a girip Batch server schedule'de uygun saatlerde (00-23:59) kayıt olduğuna ve Maximum batch threads değerinin sıfırdan farklı olmasına dikkat edin.

Ayrıca sorun batch gruplarına hiç server atanmamasıyla da ilgili olabilir:

Administration -> setup -> Batch Groups

Buradaki boş batch group için Batch Servers tabına girip Selected server alanında doğru sunucu seçili mi onu da kontrol edin.