Ö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.

 

 



c# ajax json post

clock Ocak 7, 2017 18:00 by author OzgurOzvaris

Merhaba,

Kaynak : How do I build a JSON object to send to an AJAX WebService

Eğer bir c# mvc metodunu json data göndermek isterseniz aşağıda paylaştığım örmek faydalı olacaktır.

public Response ValidateAddress(Request request1, Request myRequest2)
data: {request1:$.toJSON(myData1), myRequest2:$.toJSON(myData2)}

Yada

data: {request1:JSON.stringify(myData1), myRequest2:JSON.stringify(myData2)}

İyi çalışmalar.

 



Dynamic type ile json deserialize etme

clock Aralık 23, 2015 10:39 by author OzgurOzvaris

Merhaba,

Bazen size gelen json data bir servis sağlayıcıdan geliyorsa tamamını deserialize etmek nerede ise imkansız olur. Böyle bir durumda dynamic type'ini kullanarak ihtiyacınız olan veriye daha kolay ulaşabilirsiniz.

 dynamic dd = JsonConvert.DeserializeObject(txtResponseData.Text); 

 clsWeather_Forcast09_Result Weather_Forcast09_Result = new clsWeather_Forcast09_Result(); 

 Weather_Forcast09_Result.Weather_Forcast = new List<clsWeather_Forcast09_Result.clsWeather_Forcast>();  

 clsWeather_Forcast09_Result.clsWeather_Forcast   Weather_Forcast = new clsWeather_Forcast09_Result.clsWeather_Forcast(); 

 foreach (dynamic forecastday in dd.forecast.simpleforecast.forecastday) 

 { 

     Weather_Forcast = new clsWeather_Forcast09_Result.clsWeather_Forcast(); 

     Weather_Forcast.ForcastDate = forecastday.date.day.ToString() + "/" + forecastday.date.month.ToString() + "/" + forecastday.date.year.ToString(); 

     Weather_Forcast.highCelsius = decimal.Parse(forecastday.high.celsius.ToString()); 

     Weather_Forcast.lowCelsius = decimal.Parse(forecastday.low.celsius.ToString()); 

     Weather_Forcast.highFahrenheit = decimal.Parse(forecastday.high.fahrenheit.ToString()); 

     Weather_Forcast.lowFahrenheit = decimal.Parse(forecastday.low.fahrenheit.ToString()); 

     Weather_Forcast09_Result.Weather_Forcast.Add(Weather_Forcast); 

 }

Bu yöntem c# ta tamamen ihtiyaç çözüyor. Ancak vb.net te yine tökezlerseniz. şu yöntemi kullanabilirsiniz.Kaynak için http://stackoverflow.com/questions/20079177/deserializing-json-in-visual-basic bakabilirsiniz. Aşağıdaki kod bloğu size biraz uzun gelebilir. Parça paça dynamic vb typlerı ile ulaşmak istediğim noda ulaşıyorum. daha sonra bir dizi şeklindeki node dan for loop ile dönerek istediğim değerleri topluyorum. Çalışan bir koddur kendim kullandım.

Dim tempforecast = New With {Key .forecast = New Object} 

Dim sFile As String = SimpleTools.RWFile.ReadFile("c:\\testjson\\test.json") 

Dim root = JsonConvert.DeserializeAnonymousType(sFile, tempforecast) 

Dim tempsimpleforecast = New With {Key .simpleforecast = New Object} 

Dim forecast = JsonConvert.DeserializeAnonymousType(root.forecast.ToString(), tempsimpleforecast) 

Dim templstforecastday = New With {Key .forecastday = New Object} 

Dim simpleforecast = JsonConvert.DeserializeAnonymousType(forecast.simpleforecast.ToString(), templstforecastday) 

Dim lstforecastday = simpleforecast.forecastday 

'Dim com As String = post.com 

Dim Weather_Forcast09_Result As New clsWeather_Forcast_09.clsWeather_Forcast09_Result 

Dim Weather_Forcast As New clsWeather_Forcast_09.clsWeather_Forcast09_Result.clsWeather_Forcast 

'DirectCast(DirectCast(dd.forecast,Object).simpleforecast,Object).forecastday 

'For Each forecastday In dd.forecast.simpleforecast.forecastday 

For Each jforecastday In lstforecastday 

    Weather_Forcast = New clsWeather_Forcast_09.clsWeather_Forcast09_Result.clsWeather_Forcast() 

    'Dim tempforecastday = New With {Key .jforecastday = New Object} 

    'Dim forecastday = JsonConvert.DeserializeAnonymousType(jforecastday.ToString(), tempforecastday) 

    Dim tempDate = New With {Key .date = New Object, .high = New Object, .low = New Object} 

    Dim forecastday = JsonConvert.DeserializeAnonymousType(jforecastday.ToString(), tempDate) 

    Dim tempDateDetail = New With {Key .day = "", .month = "", .year = ""} 

    Dim fcDateDetail = JsonConvert.DeserializeAnonymousType(forecastday.date.ToString(), tempDateDetail) 

    Weather_Forcast.ForcastDate = fcDateDetail.day.ToString() + "/" + fcDateDetail.month.ToString() + "/" + fcDateDetail.year.ToString() 

    Dim temphighDetail = New With {Key .celsius = "", .fahrenheit = ""} 

    Dim highDetail = JsonConvert.DeserializeAnonymousType(forecastday.high.ToString(), temphighDetail) 

    Dim templowDetail = New With {Key .celsius = "", .fahrenheit = ""} 

    Dim lowDetail = JsonConvert.DeserializeAnonymousType(forecastday.low.ToString(), templowDetail) 

    Weather_Forcast.highCelsius = Decimal.Parse(highDetail.celsius.ToString()) 

    Weather_Forcast.lowCelsius = Decimal.Parse(lowDetail.celsius.ToString()) 

    Weather_Forcast.highFahrenheit = Decimal.Parse(lowDetail.fahrenheit.ToString()) 

    Weather_Forcast.lowFahrenheit = Decimal.Parse(lowDetail.fahrenheit.ToString()) 

    Weather_Forcast09_Result.Add(Weather_Forcast) 

Next 

oWeather_Forcast_09.Weather_Forcast09_Result = Weather_Forcast09_Result

İyi çalışmalar.

 



Mvc de view ların ayrı dll den gelmesi

clock Eylül 30, 2015 13:33 by author OzgurOzvaris

Merhaba Arkadaşlar,

Bu seferki yazımızda mvc ile ilgili biraz derin bir konudan bahsedeceğiz. Viewların başka dll lerden çağırılması. Malum microsoft mvc projeleri biraz beklenen performansta gelişmiyor. Scoot gu nun bir sunumu ile başlayan microsoftun mvc macerası herkesin ağzının suyunu akıttıktan sonra ne yazıkki diğer birçok microsoft projesi gibi beklenen heyecanla devamı getirilmedi. Microsoftta development dünyasında ki bu genel durgunluk nereye varır bilinmez ancak biz geliştiriciler yine müşteri beklentilerini karşılamak adına çoğu zaman kendi yollarımızı açmak durumunda kalıyoruz.

Standart mvc yapısında herşey aynı proje içinde oluşturulan folderlar üzerinde yapılandırılmış durumda oysaki en basit anlamda bir projenin temel olarak DDD yani Domain Driven Design pattern ile yapılandırılmış projenin en basit anlamda UI (User Interface), BL (Bussiness Layet), DAL (Data Access Layer) katmanları ile yapılandırıldığı var sayılırsa MVC sinin bu her şeyi içine gömülü tek proje mantığı hiçte iş görmeyecektir.

 

Basit bir kaç yöntemle bu yapıyı şu yapıya çevirmek mümkün

 

 

Ancak Büyük bir projeye talipseniz ve projeniz bir çok modülden oluşuyorsa o zaman bu yapıda yeterli olmayacaktır her modülünüzün kendi için de viewlarını conrollerlarını ve bussiness layerlarını barındırması gerekecektir. Bu durumda aşağıdaki makaleler size yol gösterecektir kanaatindeyim.

Compile your asp.net mvc Razor views into a seperate dll

How to create ASP.NET MVC area as a plugin DLL?

http://maxtoroq.github.io/2012/02/aspnet-mvc-plugins.html

https://github.com/RazorGenerator/RazorGenerator

Herkese İyi çalışmalar.



.Net popüler Dependecy Injection Tools

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

Merhaba,

Son json size limit problemi ile birlikte .Net dünyasında ki popüler bir kaç dependecy injection tool'u anmak gerektiğini düşündüm.

Ninjet

http://www.ninject.org/

Unitiy

http://msdn.microsoft.com/en-us/library/ff647202.aspx

http://blogs.unity3d.com/2014/05/07/dependency-injection-and-abstractions/

https://unity.codeplex.com/

Stracture Map

http://docs.structuremap.net/

Bu da gogole biraz bakınırken gördüğüm java dünyası için güzel bir makale :)

Inversion of Control Containers and the Dependency Injection pattern

 



Web Service Soap Header Linkler

clock Mayıs 14, 2014 11:09 by author OzgurOzvaris

wcf soap Log

http://stackoverflow.com/questions/17620228/log-soap-messages-from-a-console-application

SoapExtension Walkthrough -- VS7 version

http://radio-weblogs.com/0105476/stories/2002/03/22/soapextensionWalkthroughVs7Version.html

Programmatically Insert SoapHeader into SOAP Request with ASMX SoapExtensions

http://blogs.msdn.com/b/kaevans/archive/2007/08/06/programmatically-insert-soapheader-into-soap-request-with-asmx-soapextensions.aspx

private void AddHeader(SoapMessage message)
{
    CustomSoapHeader header = new CustomSoapHeader();
    header.CastMemberID = "gsupike@hotmail.com";
    header.MustUnderstand = false;
    message.Headers.Add(header);
}

 How to: Define and Process SOAP Headers 

http://msdn.microsoft.com/en-us/library/8728chd5(v=vs.80).aspx

 How to obtain SOAP Request body in C# Web

http://desalasworks.com/article/how-to-obtain-soap-request-body-in-c-web-services/

using System;
using System.Collections.Generic;
using System.Web;
using System.Xml;
using System.IO;
using System.Text;
using System.Web.Services;
using System.Web.Services.Protocols;
 
namespace SoapRequestEcho
{
  [WebService(
  Namespace = "http://soap.request.echo.com/",
  Name = "SoapRequestEcho")]
  public class EchoWebService : WebService
  {
    [WebMethod(Description = "Echo Soap Request")]
    public XmlDocument EchoSoapRequest(int input)
    {
      // Initialize soap request XML
      XmlDocument xmlSoapRequest = new XmlDocument();
 
      // Get raw request body
      using (Stream receiveStream = HttpContext.Current.Request.InputStream)
      {
        // Move to begining of input stream and read
        receiveStream.Position = 0;
        using (StreamReader readStream = 
                               new StreamReader(receiveStream, Encoding.UTF8))
        {
          // Load into XML document
          xmlSoapRequest.Load(readStream);
        }
      }
      // Return
      return xmlSoapRequest;
    }
  }
}

 Add Request SOAP-Header to Response

We will develop a web service that would authenticate users for web sites. The web site needs to pass the user ID as well as the password for the user. Apart from this the web site also needs to pass the sites ID and password. This information is needed so that the web service can validate the site that have requested for the user authentication.

The user ID and the password will be passed through the parameters of an authenticate method exposed by the web service, while the sites ID and password will be passed using SOAP header. Since the data is very sensitive SOAP extension will be used to encrypt the data and decrypt them.

http://stackoverflow.com/questions/7321526/add-request-soap-header-to-response

http://wso2.com/library/articles/extending-axis2/

Using SOAP Header and SOAP Extensions in a Web Service

case SoapMessageStage.BeforeDeserialize:

case SoapMessageStage.BeforeDeserialize:
readStr = new StreamReader(outwardStream);
writeStr = new StreamWriter(inwardStream);
soapMsg1 = readStr.ReadToEnd();
if ( message is System.Web.Services.Protocols.SoapClientMessage)
{
  // this is executed at client side
  xDoc.LoadXml(soapMsg1);
  XmlNodeList xResult = xDoc.GetElementsByTagName("AuthenticateResult");
  xResult[0].InnerXml = decrypt(xResult[0].InnerXml);
}
else if( message is System.Web.Services.Protocols.SoapServerMessage)
{
  // this is executed at server side
  xDoc.LoadXml(soapMsg1);
  XmlNodeList xSiteID = xDoc.GetElementsByTagName("siteID");
  xSiteID[0].InnerXml = decrypt(xSiteID[0].InnerXml);
  XmlNodeList xSitePwd = xDoc.GetElementsByTagName("sitePwd");
  xSitePwd[0].InnerXml = decrypt(xSitePwd[0].InnerXml);
  XmlNodeList xUserID = xDoc.GetElementsByTagName("UserID");
  xUserID[0].InnerXml = decrypt(xUserID[0].InnerXml);
  XmlNodeList xPwd = xDoc.GetElementsByTagName("Password");
  xPwd[0].InnerXml = decrypt(xPwd[0].InnerXml);
}
soapMsg1 = xDoc.InnerXml;
writeStr.Write(soapMsg1);
writeStr.Flush();
inwardStream.Position = 0;

case SoapMessageStage.AfterSerialize: 

case SoapMessageStage.AfterSerialize:
inwardStream.Position = 0;
readStr = new StreamReader(inwardStream);
writeStr = new StreamWriter(outwardStream);
soapMsg1 = readStr.ReadToEnd();
if ( message is System.Web.Services.Protocols.SoapClientMessage)
{
  // this is executed at client side
  xDoc.LoadXml(soapMsg1);
  XmlNodeList xSiteID = xDoc.GetElementsByTagName("siteID");
  xSiteID[0].InnerXml = encrypt(xSiteID[0].InnerXml);
  XmlNodeList xSitePwd = xDoc.GetElementsByTagName("sitePwd");
  xSitePwd[0].InnerXml = encrypt(xSitePwd[0].InnerXml);
  XmlNodeList xUserID = xDoc.GetElementsByTagName("UserID");
  xUserID[0].InnerXml = encrypt(xUserID[0].InnerXml);
  XmlNodeList xPwd = xDoc.GetElementsByTagName("Password");
  xPwd[0].InnerXml = encrypt(xPwd[0].InnerXml);
}
else if( message is System.Web.Services.Protocols.SoapServerMessage)
{
  // this is executed at server side
  xDoc.LoadXml(soapMsg1);
  XmlNodeList xResult = xDoc.GetElementsByTagName("AuthenticateResult");
  xResult[0].InnerXml = encrypt(xResult[0].InnerXml);
}
soapMsg1 = xDoc.InnerXml;
writeStr.Write(soapMsg1);
writeStr.Flush();
break;

 

 

 



Mvc Architectural poster

clock Şubat 5, 2014 15:20 by author OzgurOzvaris

Değerli Arkadaşlar,

Biliyorsunuz kuş bakışı önemlidir. Eğer MVC ye kuş bakışı bakmak isterseniz bu resimler faydalı olacaktır kanaatindeyim.

Kaynak

http://saulius.sunauskas.com/2013/10/14/understanding-asp-net-mvc-request-processing-pipeline-visually/

http://www.dotnet-tricks.com/Tutorial/mvc/TbR0041112-Asp.net-MVC-Request-Life-Cycle.html

asp_net_mvc_poster.zip (458.13 kb)

 

 

 



c# Mapping class

clock Nisan 16, 2013 10:25 by author OzgurOzvaris

Değerli arkadaşlar,

Bazen bir klasın içeriğini başka bir klass içine aktarmak isteyebilirsini. Bu işleme mapping deniyor. Özellikle katmanlı mimaride çokça kullandığımız bir ihtiyaç. Piyasada bir çok mapping toolları mevcut bunlardan bir kaçı structeremap, automapper gibi toolar sayılabilir. Aslında bu mapping işleminin temeli çok basit bir mantıkla başlıyor. Buna bir örnek olması amacı ile güzel bir kod parçasını sizlerle paylaşacağım.

Kaynak :

http://www.buraksenyurt.com/post/Tek-Fotoluk-Ipucu-99-Tipler-Arasi-Property-Eslestirme.aspx

http://stackoverflow.com/questions/3348634/automapper-and-inheritance-how-to-map

public static class TypeExtensions
    {
        public static void MapTo<T, S>(this S source, T target)
        {
            Type sourceType = source.GetType();
            Type targetType = target.GetType();

            var sourceProperties = sourceType.GetProperties();
            var targetProperties = targetType.GetProperties();

            for (int i = 0; i < sourceProperties.Length; i++)
            {
                var currentProperty = sourceProperties[i];
                var targetProperty = targetProperties
                    .FirstOrDefault(p => p.Name == currentProperty.Name);
                if (targetProperty != null)
                    targetProperty.SetValue(target, currentProperty.GetValue(source, null), null);
            }

        }
    
    }

 

 



C# String enums

clock Nisan 4, 2013 12:09 by author OzgurOzvaris

Değerli arkadaşlar,

Bir enum değer içinde char ve integer değerler saklanabiliyor ve geri alınabiliyor. Şimdi vaktimin darlığından bunun örneklerini yazmayacağım. Burada asıl ihtiyacımız olan şey bir enum değere bağlı string değer saklamak istersek ne yapmamız gerektiği. İlginç bir yöntem buldum. Sizlerle paylaşayım dedim.

Kaynaklar

C# String enums

Typesafe Enum

Conversion Operators

Using Conversion Operators

public sealed class enmCompanyType
    {

        private readonly String name;
        private readonly string value;
        private static readonly Dictionary<string, enmCompanyType> instance = new Dictionary<string, enmCompanyType>();


        public static readonly enmCompanyType Agency = new enmCompanyType("ACT", "Agency");
       
        private enmCompanyType(string value, String name)
        {
            this.name = name;
            this.value = value;

            instance.Add(name, this);
        }

        public override String ToString()
        {
            return name;
        }

        public string Value
        {
            get
            {
                return value;
            }
        }

        public static explicit operator enmCompanyType(string str)
        {
            enmCompanyType result;
            if (instance.TryGetValue(str, out result))
                return result;
            else
                throw new InvalidCastException();
        }

    }

 

Herkese iyi çalışmalar.

 

 



WCF Custom Context

clock Nisan 2, 2013 15:52 by author OzgurOzvaris

Değerli Arkadaşlar,

Eski alışkanlıklar kolay bırakılmıyor.Smile Eğer sizde böyle düşünüyor ve wcf niz içinde eskiden olduğu gibi herhangi bir class library altında Httpcontext.Curent.Session["Parameter"] kullanmak isterseniz bu yöntem hoşunuza gidecektir. HttpContext benzeri bir custom context yapısı kuracağız ve bunu wcf'imize bağlayacağız.

Tabiki Kaynak

http://hyperthink.net/blog/a-simple-ish-approach-to-custom-context-in-wcf/ 

Öncelikle bir MyContext classı oluşturun bu classınproje içinde  her yerden görünmesi gerekiyor.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace Infrastructure
{
    public class MyContext : IExtension<OperationContext>
    {

        //The "current" custom context

        public static MyContext Current
        {

            get { return OperationContext.Current.Extensions.Find<MyContext>(); }

        }



        #region IExtension<OperationContext> Members



        public void Attach(OperationContext owner)
        {

            //no-op

        }



        public void Detach(OperationContext owner)
        {

            //no-op

        }

        #endregion



        object contextProperty1;



        //You can have lots more of these -- this is the stuff that you 

        //want to store on your custom context

        public object ContextProperty1
        {

            get { return this.contextProperty1; }

            set { this.contextProperty1 = value; }

        }

    }
}

Şimdi geri kalan kodları wcf inizi görmesi yeterli.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ServiceModel;
using System.ServiceModel.Dispatcher;
using System.ServiceModel.Description;
using System.ServiceModel.Channels;


namespace WcfServiceLib
{
    

    public class MyContextMessageInspector : IDispatchMessageInspector
    {

        public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request,
                                          IClientChannel channel,
                                          InstanceContext instanceContext)
        {

            OperationContext.Current.Extensions.Add(new MyContext());

            return request.Headers.MessageId;

        }



        public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
        {

            OperationContext.Current.Extensions.Remove(MyContext.Current);

        }

    }

    public class MyContextBehaviorAttribute : Attribute, IServiceBehavior
    {

        #region IServiceBehavior Members



        public void AddBindingParameters(ServiceDescription serviceDescription,

                                         ServiceHostBase serviceHostBase,

                                         System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints,

                                         BindingParameterCollection bindingParameters)
        {

            //no-op

        }



        public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
        {

            foreach (ChannelDispatcher cd in serviceHostBase.ChannelDispatchers)
            {

                foreach (EndpointDispatcher ed in cd.Endpoints)
                {

                    ed.DispatchRuntime.MessageInspectors.Add(new MyContextMessageInspector());

                }

            }

        }



        public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
        {

            //no-op            

        }

        #endregion

    }

   }

Yukarıda bölümde MyContexti bir attribute ile wcf clasımıza uygulayabilir hale getirdik. Şimdi onu uyguluyoruz.

[ServiceContract]

    [MyContextBehavior]

    public class MySerivce
    {

        [OperationContract]

        public string DoStuff(string foo)
        {

            //Use MyContext.Current here to do something interesting...

            MyContext.Current.ContextProperty1 = "test";

        }

    }

Şimdi artık MyContext.Current.ContextProperty1 değerini projenin her yerinden alabilirsiniz.

 

Herkese iyi çalışmalar.



Hakkımızda  AboneOl 

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

Month List

RecentPosts

Sign In