[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-> adrese 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.