Özgür Özvarış

Bir yazılımcının kırık dökük dünyası

c# TLS 1.2 connection .Net 4.0

clock Kasım 23, 2017 11:42 by author OzgurOzvaris

Merhaba Arkadaşlar

Kaynak :

TCP/IP Protocol Architecture

SslProtocols Enumeration

https://stackoverflow.com/questions/4137106/are-there-net-implementation-of-tls-1-2 

https://stackoverflow.com/questions/37869135/is-that-possible-to-send-httpwebrequest-using-tls1-2-on-net-4-0-framework

Bu gün ödeme entegrasyonu yaptığımız sistemlerden bir tanesi artık TLS 1.1 değil TLS 1.2 kullandıklarını söyledi. Bizde kodumuzu ona uydurmak durumunda kaldık.

Öncelikle TLS kavaramının OSI katmanlarında Transpor Layer Security kavramına karışık geldiğini belirtmekte fayda görüyorum. 

.Net 4.5 versiyonunda sorunsuz olarak TLS 1.2 yi destekliyor

//System.Net.ServicePointManager.SecurityProtocol
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; // comparable to modern browsers
var response = WebRequest.Create("https://www.howsmyssl.com/").GetResponse();
var body = new StreamReader(response.GetResponseStream()).ReadToEnd();

Fakat şuan bizim çalıştığımı proje ne yazıkki .Net 4.0

4.0 için de örnek kodumuz

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
ServicePointManager.DefaultConnectionLimit = 9999;

İyi çalışmalar.

 

 



Unable to load DLL 'SQLite.Interop.dll'

clock Kasım 29, 2016 12:38 by author OzgurOzvaris

Merhaba,

Kaynak :

Unable to load DLL 'SQLite.Interop.dll'

System.Data.SQLite Downloads

Başlıktaki hatanın .net ile Sql lite kullandı iseniz genel olarak karşılaşacağınız bir hata olduğunu düşünüyorum. Bu sorunun çözümü ile ilgili sql lite ınresmi sitesinde yazılan açıklamada Sql.lite dll i ile birlikte x86 ve x64 klasörleri ile gelen interop dll lerininde kurmanız yönünde. Proje çalıştığında dosyaları nereye yığıyorsa (release folder or debug folder) örneğin bu "bin" klasörü olabilir x86 ve x64 folderları ve içindeki interop dll leride orada olmalı.

Resmi sitedeki açıklama şu şekilde özetlenmiş

<bin>\App.exe (optional, managed-only application executable assembly)
<bin>\App.dll (optional, managed-only application library assembly)
<bin>\System.Data.SQLite.dll (required, managed-only core assembly)
<bin>\System.Data.SQLite.Linq.dll (optional, managed-only LINQ assembly)
<bin>\System.Data.SQLite.EF6.dll (optional, managed-only EF6 assembly)
<bin>\x86\SQLite.Interop.dll (required, x86 native interop assembly)
<bin>\x64\SQLite.Interop.dll (required, x64 native interop assembly)

İyi çalışmalar. 

 



Test Automation tool

clock Ağustos 18, 2014 18:17 by author OzgurOzvaris

Merhaba,

Geçen gün güzel bir sunuma katıldım. Test automation tollardan özellikle şu ikisi aklımda kaldı sizlerle de paylaşayım.

jmeter

http://jmeter.apache.org/

Bir ara bende stress testi için bu tool'u kullanmış ve windows ortamına uyarlamıştım. Konu ile ilgili makalem http://www.ozgurozvaris.com/post/2014/02/14/Jmeter.aspx

Bir diğer tool'da

Selenium

http://www.seleniumhq.org/

atrium isimle bir ara programlar çok güzel android testleride yapabiliyormuş. Adroid sdk emulatorunun çok yavaş olduğu ile ilgili bir ayrındı öğrendim bunun için bir intel driver kuruluyormuş.

Bende uyanan en önemli intiba. Test otomasyonu ciddi bir işmiş dedim.

İyi çalışmalar.

 



Html olarak word dökümanı çıktısı oluşturmak

clock Mart 28, 2013 15:24 by author OzgurOzvaris

Değerli Arkadaşlar,

daha önceki uygulamamızda excel ile ilgili bir kaç örnek vermıştim.

http://www.ozgurozvaris.com/post/2013/02/07/MVC-Excel-Export.aspx

http://www.ozgurozvaris.com/post/2013/02/18/MVC-Excel-Export-2.aspx

Şimdi ise benzer bir şekilde word dokümanı nasıl alınır ona bakalım.

Kaynak

http://www.shotdev.com/asp/asp-word/asp-word-response-contenttype-application-vnd-ms-word/

<%@ Language=VBScript %>
<%
Option Explicit
Response.Buffer = TRUE
Response.ContentType = "application/vnd.ms-word"
Response.AddHeader "Content-Disposition", "attachment; filename = MyDoc.doc"
%>
<html>
<head>
</head>
<body>

<table width="600" border="1">
<tr>
<th width="91"> <div align="center">CustomerID </div></th>
<th width="98"> <div align="center">Name </div></th>
<th width="198"> <div align="center">Email </div></th>
<th width="97"> <div align="center">CountryCode </div></th>
<th width="59"> <div align="center">Budget </div></th>
<th width="71"> <div align="center">Used </div></th>
</tr>
<%

%>
<tr>
<td><div align="center"><%="5"%></div></td>
<td><%="test"%></td>
<td><%="test"%></td>
<td><div align="center"><%="test"%></div></td>
<td align="right"><%="test"%></td>
<td align="right"><%="test"%></td>
</tr>

</table>

</body>
</html>


MVC Excel Export - 2

clock Şubat 18, 2013 10:33 by author OzgurOzvaris

Değerli Arkadaşlar,

Bir önceki yazımızda SpreadsheetModel view oluşturarak excelimizi nasıl form submit işlemi sonucunda mvc üzerinden export edebileceğimizi öğrendik. Bu yazımızda ise eğer formumuzu submit etmek yerine sadece ajax mantığı ile sayfanın sadece ihtiyacımız olan datasını gönderip excel downlad nasıl yapacağımızı öğreneceğiz.

Internete baktığınız zaman ajax.post yöntemi ile gönderilen datalar sonucunda clienta gönderilen excel dosyalarının downlad edilemediğini göreceksiniz. Buna karşılık alternatif olarak kullanılan bir yöntemi çok beğendim sizlerle paylaşmak istedim.

Tabi önce kaynaklar,

http://stackoverflow.com/questions/2186562/post-to-server-receive-pdf-deliver-to-user-w-jquery

http://stackoverflow.com/questions/5742243/submitting-a-form-with-json-data-in-jquery

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

ve tabiki Kendi harmanlanmış projem

MVCExcelExport.zip (2,36 mb)

Model

public class SpreadsheetModel
    {
        public String fileName { get; set; }
        public String[,] contents { get; set; }
    }
public class PersonSearchModel
    {
        public string FileName { get; set; }

        public string Field1 { get; set; }

        public DateTime Field2 { get; set; }

        public PersonSearchChieldClass ChieldClass { get; set; }
    }

    public class PersonSearchChieldClass
    {
        public string Field1 { get; set; }

        public int Field2 { get; set; }
    }

Controller

public ActionResult Index(string Cell1, string Cell2)
        {

            SpreadsheetModel mySpreadsheet = new SpreadsheetModel();
            mySpreadsheet.contents = new String[3, 2] 
                { 
                    {Cell1,Cell2}, 
                    {"Cell21","Cell22"},
                    {"Celsdfsdl31","Csdfsdell3"} 
                };

            mySpreadsheet.contents[2, 1] = "test";

            mySpreadsheet.fileName = "test.xls";
            return View(mySpreadsheet);

        }
public ActionResult Index2(string filename, string format, string content)
        {
            string[] ContentData = content.Split(';');

            SpreadsheetModel mySpreadsheet = new SpreadsheetModel();
            mySpreadsheet.contents = new String[3, 2] 
                { 
                    {ContentData[0],ContentData[1]}, 
                    {"Cell21","Cell22"},
                    {"Celsdfsdl31","Csdfsdell3"} 
                };

            mySpreadsheet.contents[2, 1] = "test";

            mySpreadsheet.fileName = filename +".xls";
            return View("Index", mySpreadsheet);

        }
public ActionResult Index3(string Paramaters)
        {
            System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();

            PersonSearchModel PersonSearchModel_ = new PersonSearchModel();

            PersonSearchModel_ = serializer.Deserialize<PersonSearchModel>(Paramaters);




            SpreadsheetModel mySpreadsheet = new SpreadsheetModel();
            mySpreadsheet.contents = new String[3, 2] 
                { 
                    {PersonSearchModel_.Field1,PersonSearchModel_.Field2.ToShortDateString()}, 
                    {PersonSearchModel_.ChieldClass.Field1,PersonSearchModel_.ChieldClass.Field2.ToString()},
                    {"Celsdfsdl31","Csdfsdell3"} 
                };

            mySpreadsheet.contents[2, 1] = "test";

            mySpreadsheet.fileName = PersonSearchModel_.FileName + ".xls";
            return View("Index", mySpreadsheet);

        }

View

jQuery.download = function (url, data, method) {
        //url and data options required
        if (url && data) {
            //data can be string of parameters or array/object
            data = typeof data == 'string' ? data : jQuery.param(data);
            //split params into form inputs
            var inputs = '';
            jQuery.each(data.split('&'), function () {
                var pair = this.split('=');
                inputs += '<input type="hidden" name="' + pair[0] + '" value="' + pair[1] + '" />';
            });
            //send request
            jQuery('<form action="' + url + '" method="' + (method || 'post') + '">' + inputs + '</form>')
		.appendTo('body').submit().remove();
        };
    };

    jQuery.downloadJson = function (url, data, method) {
        //url and data options required
        if (url && data) {
            //send request
            var formTagStr = '<form id="DocPost" action="' + url + '" method="' + (method || 'post') + '"> <input type="hidden" name="Paramaters" id="Paramaters"  /> </form>';

            jQuery(formTagStr).appendTo('body');

            //alert(data);

            $("#DocPost #Paramaters").val(data);

            $("#DocPost").submit().remove();
        };
    };
function test() {
        var ContentData = "5;test";

        ExcelExportAjaxPost('/ExcelExport/Index2', 'filename=mySpreadsheet&format=xls&content=' + ContentData);
    }

    function test2() {

        var PersonSearchChieldClass =
        {
            Field1: "Chield",

            Field2: 15 
        }

        var PersonSearchModel = {

            FileName : "test",

            Field1: "Master",

            Field2:"18.02.2013",

            ChieldClass: PersonSearchChieldClass
        }

        ExcelExportAjaxPost2('/ExcelExport/Index3', JSON.stringify(PersonSearchModel));


    }

    function ExcelExportAjaxPost(path, data) {

        $.download(path, data);
    }

    function ExcelExportAjaxPost2(path, data) {

        $.downloadJson(path, data);
    }
<h2>@ViewBag.Message</h2>
<p>
    Excel Export Yöntemleri
</p>

<a href="./ExcelExport?Cell1=aaa&Cell2=111"> Normal Excel çıktı Al</a>
<br />
<br />
<a  href="#" onclick="test()"> Ajax Excel çıktı Al (form data)</a>
<br />
<br />
<a  href="#" onclick="test2()"> Ajax Excel çıktı Al (json data)</a>

Burada bir inceliği belirtmem lazım. "downloadJson" javascript metoduna dikkat ederseniz dinamik olarak oluşturulan formun içinde json datayı taşıyan hidden parameters html elementinin value değerinin içine string olarak değeri yazmak yerine  $("#DocPost #Paramaters").val(data); şeklinde value değerini set ettiğimi göreceksiniz. Sebebi Gidip gelen data string olduğu için alt classlar için " ' " değeri kullanılıyor ancak direk value ya set ederseni bu tırnaklar çakışmaya neden oluyor.

Herkese iyi çalışmalar dilerim.

 

 



Soap Webservis Test

clock Ocak 10, 2013 16:07 by author OzgurOzvaris

Değerli Arkadaşlar,

Eğer bir web servisi soap data ile test etmek ister ve request responsları açık açık görmek isterseniz bu örnek işinize yaracakatır diye tahmin ediyorum.

Önce linkleri verelim.

How to send/receive SOAP request and response using C#

How automatically remove all white spaces start or end in a string

Removing XmlDocument white space c#

Format XML String to Print Friendly XML String

Kendi Çalışmam : RequestSoap.zip (47,77 kb)

Not : Soap Action'a dikkat web servisin wsdl'lindeki gözüken pathi olduğu gibi muhakkak yazmanız gerekmektedir.

- Logladığınız yada göndermek istediğiniz soap datasını Request Soqp Data Bölümüne yazıyorsunuz. Eğer log datada aralarda boşluk var ise Temizle buttonu otomatik olarak bu boşlukları temizleyecek ve görsel olarak xml formatlayacaktır.

- Test Buttonuna bastıktan sonra sonu. Response Soap data bölümüne gelir. Görsel olarak Formatlamak için tekrar Temizle buttonuna basabilirsiniz.

Bu kadar basit.

İyi çalışmalar.



Asp.net Development Server Başka PC den erişme

clock Ocak 2, 2013 13:12 by author OzgurOzvaris

Değerli arkadaşlar,

Bazen localinizde sorunsuz olarak çalışan bir web uygulamanızı başka bir pc den de çalıştırmak isteyebilirsiniz. Ancak nomalde web development server buna imkan sağlamaz. Bunu sağlayabilmek için küçük bir ip forwarding yada ip redirection yapacak küçük bir programa ihtiyacımız var.

Ör: http://localhost:2661/Test.aspx sayfasında local ip niz ile http://local_ip/test.aspx şeklinde erişmek isteyebilirsiniz. Bu işlemi yapmak için aşağıdaki ip uçlarından faydalanabilirsiniz.

Hemen linkleri verelim.

Accessing ASP.NET Development Server from another pc on the network

Remote Access To ASP.NET Development Server

http://www.boutell.com/rinetd/

örnek exe : rinetd.zip (115,33 kb)

rinetd.exe bu iş için biçilmiş kaftandır. 

Not : Bu işlemi 64 bit windows 7 üzerinde yaptım sorunsuz olarak çalıştırdım.

Yönlendirme işlemini yapmak için rinetd.exe bulunduğu klasöre yeni bir rinetd.conf dosyası oluşturalım içine

0.0.0.0 8080 127.0.0.1 2661
0.0.0.0 9080 127.0.0.1 2661

Bu oluşturduğumuz configirasyon dosyasını bir yukle.bat dosyası ile rinetd.exe dosyasına yükleyelim.

@echo off 
echo ================================================ 
echo Running rinetd with the following configuration: 
echo ================================================ 
type rinetd.conf 
rinetd.exe -c rinetd.conf

Şimdi admin hakkına (Run as administrator) sahip bir cmd penceresi açalım. Geçerli klasörü rinetd.exe olduğu klasöre yönlendirelim. 

 

Artık sayfanız  http://local_ip/test.aspx adresinden çalışır duruma geldi.

Selamlar.

 



Json Serializer

clock Ocak 2, 2013 08:56 by author OzgurOzvaris

Değerli arkadaşlar,

Yeni web dünyasında artık olmazsa olmaz konulardan biri jquery diğeride json data paketleri gibi gözüküyor. Bu günki örneğimizde client tarafına yüklenmiş bir dropdown listin nasıl tekrar server'a postback olmadan başka bir doropdown list tarafından master detail ilişki ile yönetildiğini göreceğiz.

Hemen bir kaç kaynak linki verelim.

JSON Serialization and Deserialization in ASP.NET

Adding options to a select using Jquery/javascript

What's the best way to query an array in javascript to get just the items from it I want?

Using core jQuery, how do you remove all the options of a select box, then add one option and select it?

Gördüğünüz gibi basit uygulamalarda bile ne kadar çok yardıma ihtiyaç duyuyoruz. Varın siz bir de bir projenin kaç kırıntı ve köklü bilgi parçasından meydan geldiğini hesap edin. Her neyse.

JsonSerializer.zip (175,35 kb)

 



Soap Serialize ve Deserialize

clock Aralık 25, 2012 09:43 by author OzgurOzvaris

Değerli Arkadaşlar,

Geçen çok ilginç bir şeyle karşılatım bir müşterimizde web servis extensionla (Bir önceki blogumuz) logladığımız bir web servis test metodunu kendimin de test etmesi ihtiyacı oldu. Test.asmx isimli bir yeni web servise aynı metodun aynı class input ve output değerleri ile bir test metodunu oluşturdum. Ancak client tarafa web servisimi referans gösterince input ve output (io) classların bir örneğini test.asmx e ait otomatik proxy class içine kopyalandı (Bu kopyalama ile ilgili sorun bir başka wcf uygulamamda çözmüştüm. Belki ilerleyen zamanda bununla ilgili de bir örnek yaparız.). Böyle olunca server tarafında aynı io classlarını kullanmama rağmet client tarafta farklı io classlar şeklinde gözüktü.

Client taraftaki fonksyonu giriş çıkış değerlerini test'e göre ayarlamak yerine, burada bir ali cengiz oyunu yapmaya karar verdim. Aslında soap haberleşmesinde kullanılan io claslar birer soap döküman öyle ise bu classların içinde ki class isimlerini değiştirerek client tarafta minimum değişiklikle sunucu tarafı ile haberleşebilirim diye düşündüm.

Önce kaynakların linklerini vermekle başlıyayım

C# serializing/deserializing with memory stream

Using DataContractSerializer to serialize, but can't deserialize back

Kendi Çalışmam (18,71 kb)

Bu değiştiştirme işlemi bir kaç aşamadan oluşuyor.

1 - Proje içinde kullanınan gerçek classın Serialize edilmesi ve stringe dönüştürülmesi

2 - Oluşturulan class içindeki source class typenin target class tipi ile deşitirilmesi

3 - Oluşan yeni string değerin deSerialize edilerek return değerin target class tipi üzerinden alınması.

Tabi burda yine bazı sitelerden faydalandım.

Burada dikkat edilmesi gereken bir husus var. Klasik yöntemden Serialize ve deSerialize yöntemleri (kysvdy) ile bu işlemi yapamıyor olmamız çünkü kysvdy de memory stream deSerialize bit değeri artıyor. Bunun izahını verdiğim linklerde bulabilirsiniz.



Webservice trace extension

clock Aralık 19, 2012 13:35 by author OzgurOzvaris

Değerli Arkadaşlar,

Belki sizde benim gibi web service trace etmeye ihtiyaç duyabilirsiniz.

Biraz kaynak bulmakta zorlandım önce kaynakların linklerini vermekle başlıyayım.

MSDN : How to: Implement a SOAP Extension

Efficient Tracing Using SOAP Extensions in .NET

TraceExtension codeplex Sample Project

Kendi Çalışmam (292,60 kb)

 

Bildiğiniz üzere bizler gerek wcf de gerek, webservice (.asmx) uygulamalarında kullandığımız metodlarda xml tabanlı soap mesajları ile haberleşme yapıyoruz. Kullandığımız web metodların, bu mesajları kullanabilmesi için typelara çeviriyorlar. Ancak üst seviyedeki soap mesajları kullanmak için bir kaç yöntemden biride SoapExtension classından yada customize edilmesinden faydalanmak.

Bir yöntemde networku dinlemek. Araştırmam esnasında http://www.wireshark.org/ ürününü gördüm. Belki ufuk olur diye bunuda not edeyim...

 

Kendi çalışmamada web.config'e 2 adet parametre ekleniyor WsLogModuleList, SimpleLogPath isimli.

WsLogModuleList :

[TraceExtension(Filename = "C:\\wslogtest\\log.txt", ModuleName = "HelloWorld")]

ModuleName = "HelloWorld" değeri WsLogModuleList parametresinde ayrılmış şekilde bulunuyorsa bu web metod loglanıyor.

SimpleLogPath : Eğer TraceExtension bölümünde File Name ile ayrı bir path belirtilmemişse logu SimpleLogPath te belirtilen yere alır.

 İyi çalışmalar.

 

Not 1: wcf trace etmek için bu yöntemi kullanmayın. wcf için bu link belki iş görebilir. Writing a WCF Message Inspector

Not 2: web servisi test etmek için localde browserda gelen web servis test etmek için kullanılan invoke komutunu kullanmayın.

 



Hakkımızda  AboneOl 

Blog Yayınımıza Hoşgeldiniz.

Month List

RecentPosts

Sign In