<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Muhammed Medeni Baykal</title>
    <description>Windows Phone 7 şeysi -şimdilik</description>
    <link>http://muhammedbaykal.com/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 2.5.0.16</generator>
    <language>tr-TR</language>
    <blogChannel:blogRoll>http://muhammedbaykal.com/opml.axd</blogChannel:blogRoll>
    <dc:creator>Muhammed Medeni Baykal</dc:creator>
    <dc:title>Muhammed Medeni Baykal</dc:title>
    <geo:lat>41.000000</geo:lat>
    <geo:long>29.000000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/mbaykal" /><feedburner:info uri="mbaykal" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>Windows Phone’da Bir DependencyProperty Değiştiğinde Haberdar Olma</title>
      <description>&lt;p&gt;WPF&amp;rsquo;de bir DependencyProperty&amp;rsquo;nin PropertyMetadata&amp;rsquo;sı &amp;uuml;zerinde işlem yapmak istediğimizde &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.dependencypropertydescriptor(v=VS.100).aspx"&gt;DependencyPropertyDescriptor&lt;/a&gt; sınıfı hayatımızı kurtarırdı. Ancak bu sınıf Windows Phone&amp;rsquo;da yok. Bu &amp;ccedil;oğu zaman bunu hissetmezsiniz. Ancak ya bir &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.dependencyproperty(v=VS.95).aspx"&gt;DependencyProperty&lt;/a&gt; değiştiğinde haberdar olmanız gerekiyorsa?&lt;/p&gt;
&lt;p&gt;Bunu bir hack yardımı ile yapabilirsiniz.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public static void Register(DependencyObject target, string propertyPath, DependencyPropertyChangedEventHandler dependencyPropertyChanged)
{
    Binding binding = new Binding(propertyPath) { Source = target };

    var property = DependencyProperty.RegisterAttached("_" + Guid.NewGuid().ToString("N"), typeof(object), typeof(DependencyObject),
        new PropertyMetadata
        (
            (o, e) =&amp;gt;
            {
                o.Dispatcher.BeginInvoke(() =&amp;gt; dependencyPropertyChanged.Invoke(o, e));
            }
        )
    );

    BindingOperations.SetBinding(target, property, binding);
}&lt;/pre&gt;
&lt;p&gt;&amp;Ouml;rnek projeyi ve kodlara &lt;a href="http://mbaykalblogsamples.codeplex.com/releases/view/80104"&gt;buradan&lt;/a&gt; ulaşabilirsiniz.&lt;/p&gt;
&lt;p&gt;Bu yazı &amp;ccedil;ok kısa oldu sanırım, daha sonra g&amp;ouml;r&amp;uuml;şmek &amp;uuml;zere&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/d1J7dC6d-eqYI77SleS8P4i_X0Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/d1J7dC6d-eqYI77SleS8P4i_X0Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/d1J7dC6d-eqYI77SleS8P4i_X0Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/d1J7dC6d-eqYI77SleS8P4i_X0Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mbaykal/~4/nVD_3ESqFiE" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/mbaykal/~3/nVD_3ESqFiE/post.aspx</link>
      <author>medeni@muhammedbaykal.com</author>
      <comments>http://muhammedbaykal.com/post/dependencypropertychanged-windows-phone.aspx#comment</comments>
      <guid isPermaLink="false">http://muhammedbaykal.com/post.aspx?id=6af5cc00-30de-4078-ba11-55d278386586</guid>
      <pubDate>Sat, 07 Jan 2012 16:18:00 +0200</pubDate>
      <category>C#</category>
      <category>Windows Phone</category>
      <dc:publisher>mbaykal</dc:publisher>
      <pingback:server>http://muhammedbaykal.com/pingback.axd</pingback:server>
      <pingback:target>http://muhammedbaykal.com/post.aspx?id=6af5cc00-30de-4078-ba11-55d278386586</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://muhammedbaykal.com/trackback.axd?id=6af5cc00-30de-4078-ba11-55d278386586</trackback:ping>
      <wfw:comment>http://muhammedbaykal.com/post/dependencypropertychanged-windows-phone.aspx#comment</wfw:comment>
      <wfw:commentRss>http://muhammedbaykal.com/syndication.axd?post=6af5cc00-30de-4078-ba11-55d278386586</wfw:commentRss>
    <feedburner:origLink>http://muhammedbaykal.com/post.aspx?id=6af5cc00-30de-4078-ba11-55d278386586</feedburner:origLink></item>
    <item>
      <title>Windows Phone 7.5 ile AWS Kullanmak - Bölüm 3</title>
      <description>&lt;p&gt;&lt;em&gt;Henüz okumadıysanız&lt;/em&gt; &lt;em&gt;makalemin ilk kısmına &lt;/em&gt;&lt;a href="http://muhammedbaykal.com/post/Windows-Phone-75-Amazon-AWS-SimpleDb-Part-I.aspx"&gt;&lt;em&gt;buradan&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, ikinci kısmına ise &lt;/em&gt;&lt;a href="http://muhammedbaykal.com/post/Windows-Phone-75-Amazon-AWS-SimpleDb-Part-II.aspx"&gt;&lt;em&gt;buradan&lt;/em&gt;&lt;/a&gt;&lt;em&gt; ulaşabilirsiniz.&lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;PutAttributes&lt;/h2&gt;  &lt;p&gt;SimpleDb’ye Insert ve Update işlemleri PutAttributes aksiyonu ile yapılıyor. Bu işlem ile daha detaylı bilgiyi &lt;a href="http://docs.amazonwebservices.com/AmazonSimpleDB/latest/DeveloperGuide/index.html?SDB_API_PutAttributes.html"&gt;dokümantasyondan&lt;/a&gt; okuyabilirsiniz.&lt;/p&gt;  &lt;pre class="brush: c-sharp;"&gt;var data = new Dictionary&amp;lt;string, string&amp;gt;()
{
    { &amp;quot;Action&amp;quot;, &amp;quot;PutAttributes&amp;quot; }, 
    { &amp;quot;DomainName&amp;quot;, &amp;quot;domain_ismi&amp;quot; },
    { &amp;quot;ItemName&amp;quot;, &amp;quot;Deneme Kaydi&amp;quot; },
    { &amp;quot;Attribute.1.Name&amp;quot;, &amp;quot;1. atrribute&amp;quot; },
    { &amp;quot;Attribute.1.Value&amp;quot;, &amp;quot;1. değer&amp;quot; },
};

Haplois.Cloud.AWS.Common.REST.Query(data, (o) =&amp;gt;
{
    var result = new Haplois.Cloud.AWS.ResponseBase(XDocument.Parse(o));         
});&lt;/pre&gt;

&lt;p&gt;Yukarıdakine benzer bir kod ile Insert işlemi yapabiliriz. Yukarıdaki kod, “domain_ismi” domaininde ismi “Deneme Kaydı” olan bir kayıt oluşturur (ya da varsa onu seçer) ardından ismi “1. attribute” olan bir nitelik yaratır ve ona “1. değer” değerini atar.&lt;/p&gt;

&lt;p&gt;PutAttributes aksiyonu ile eklenecek ya da güncellenecek nitelikleri göndermek için “Attribute.&lt;strong&gt;&lt;em&gt;N&lt;/em&gt;&lt;/strong&gt;.Name”, “Attribute.&lt;strong&gt;&lt;em&gt;N&lt;/em&gt;&lt;/strong&gt;.Value” ve “Attribute.&lt;strong&gt;&lt;em&gt;N&lt;/em&gt;&lt;/strong&gt;.Replace” parametreleri kullanılır. Burada “&lt;em&gt;&lt;strong&gt;N&lt;/strong&gt;&lt;/em&gt;” herhangi bir doğal sayı olabilir.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Attribute.N.Name: Eklenecek ya da güncellenecek olan niteliğin ismi &lt;/li&gt;

  &lt;li&gt;Attribute.N.Value: Eklenecek ya da güncellenecek olan niteliğin değeri &lt;/li&gt;

  &lt;li&gt;Attribute.N.Replace: “false” olarak verildiğinde niteliği aynısı olsa bile yeniden ekler. “true” olarak verildiğinde ise aynısı varsa günceller, yoksa ekler. Varsayılan değeri: “false” &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Insert ve Update işlemlerini kolaylaştırması için yazdığım metodları ekteki kodlardan inceleyebilirisiniz.&lt;/p&gt;

&lt;h2&gt;DeleteAttributes&lt;/h2&gt;

&lt;p&gt;Delete işlemlerini bu aksiyon ile yapılıyor. Bu işlem hakkında daha detaylı bilgiyi &lt;a href="http://docs.amazonwebservices.com/AmazonSimpleDB/latest/DeveloperGuide/index.html?SDB_API_PutAttributes.html"&gt;dokümantasyondan&lt;/a&gt; bulabilirsiniz.&lt;/p&gt;

&lt;pre class="brush: c-sharp"&gt;var data = new Dictionary&amp;lt;string, string&amp;gt;()
{
    { &amp;quot;Action&amp;quot;, &amp;quot;DeleteAtributes&amp;quot; }, 
    { &amp;quot;DomainName&amp;quot;, &amp;quot;domain_ismi&amp;quot; },
    { &amp;quot;ItemName&amp;quot;, &amp;quot;Deneme Kaydi&amp;quot; },
    { &amp;quot;Expected.1.Name&amp;quot;, &amp;quot;1. atrribute&amp;quot; },
    { &amp;quot;Expected.1.Value&amp;quot;, &amp;quot;1. değer&amp;quot; },
};

Haplois.Cloud.AWS.Common.REST.Query(data, (o) =&amp;gt;
{
    var result = new Haplois.Cloud.AWS.ResponseBase(XDocument.Parse(o));

    MessageBox.Show(result.BoxUsage.ToString());
});&lt;/pre&gt;

&lt;p&gt;Bu aksiyon ismi verilen domain’de silme işlemi yapar.&amp;#160; Eğer Expected.N.Name ve Expected.N.Value ikilisi ile belirli nitelikler verilmişse bu nitelikleri sağlayan öğeler silinir. Silme işlemi sırasında Parameter.N.Name ile parametre ismi verilmişse yalnızca isimleri verilen parametreler silinir. Eğer parametrenin çoklu değeri varsa Parameter.N.Value ile istenilen değeri de verilerek yalnızca istenilen parametrenin silinmesi sağlanabilir.&lt;/p&gt;

&lt;p&gt;Eğer parametre ismi verilmemişse öğe ve tüm parametreleri silinir.&lt;/p&gt;

&lt;p&gt;Update ve Delete işlemlerinde şartları sağlayan bir öğe bulunamazsa hata oluşmaz ve işlem başarılı mesajı döner.&lt;/p&gt;

&lt;p&gt;Delete işlemi için yazdığım yardımcı metodu da&amp;#160; örnek kodlar içerisinde bulabilirsiniz.&lt;/p&gt;

&lt;p&gt;SimpleDb ile ilgili yazacaklarım bu kadar. Daha sonra Amazon Simple Storage Service ile ilgili olarak da bir şeyler yazacağım. Ancak lütfen unutmayın, bu yazılarda verdiğim kodlar sadece örnek amaçlı, servilerin tüm özelliklerini içermiyor ya da en iyi çözümü sunmuyor olabilirler. &lt;/p&gt;

&lt;p&gt;Bu yazının örnek kodlarını &lt;a href="http://muhammedbaykal.com/FILES%2f2011%2f11%2fAmazonAWSSample3.rar.axdx"&gt;buradan&lt;/a&gt; indirebilirsiniz.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xst_LuwzMKpT4n9bwCGbwsCXmgs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xst_LuwzMKpT4n9bwCGbwsCXmgs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xst_LuwzMKpT4n9bwCGbwsCXmgs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xst_LuwzMKpT4n9bwCGbwsCXmgs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mbaykal/~4/WC_GGsADxZE" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/mbaykal/~3/WC_GGsADxZE/post.aspx</link>
      <author>medeni@muhammedbaykal.com</author>
      <comments>http://muhammedbaykal.com/post/Windows-Phone-75-Amazon-AWS-SimpleDb-Part-III.aspx#comment</comments>
      <guid isPermaLink="false">http://muhammedbaykal.com/post.aspx?id=2dcb77f8-834c-4074-9017-3724e1244974</guid>
      <pubDate>Sun, 20 Nov 2011 01:45:00 +0200</pubDate>
      <category>Cloud</category>
      <category>Windows Phone</category>
      <dc:publisher>mbaykal</dc:publisher>
      <pingback:server>http://muhammedbaykal.com/pingback.axd</pingback:server>
      <pingback:target>http://muhammedbaykal.com/post.aspx?id=2dcb77f8-834c-4074-9017-3724e1244974</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://muhammedbaykal.com/trackback.axd?id=2dcb77f8-834c-4074-9017-3724e1244974</trackback:ping>
      <wfw:comment>http://muhammedbaykal.com/post/Windows-Phone-75-Amazon-AWS-SimpleDb-Part-III.aspx#comment</wfw:comment>
      <wfw:commentRss>http://muhammedbaykal.com/syndication.axd?post=2dcb77f8-834c-4074-9017-3724e1244974</wfw:commentRss>
    <feedburner:origLink>http://muhammedbaykal.com/post.aspx?id=2dcb77f8-834c-4074-9017-3724e1244974</feedburner:origLink></item>
    <item>
      <title>Windows Phone 7.5 ile AWS Kullanmak - Bölüm 2</title>
      <description>&lt;p&gt;&lt;em&gt;&lt;a href="http://muhammedbaykal.com/post/Windows-Phone-75-Amazon-AWS-SimpleDb-Part-I.aspx"&gt;Bir &amp;ouml;nceki makalemi&lt;/a&gt; okumadıysanız &amp;ouml;ncelikle onu okumanızı tavsiye ederim. &amp;Ouml;nceki makalemde bıraktığım yerden devam ediyorum.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;AWS&amp;rsquo;ye REST İsteklerini G&amp;ouml;nderme&lt;/h2&gt;
&lt;p&gt;İsteklerimizi imzalamak i&amp;ccedil;in gerekli kodlar artık elimizde olduğuna g&amp;ouml;re AWS&amp;rsquo;yi sorgulamaya başlayabiliriz. AWS&amp;rsquo;ye yapacağımız isteklerde parametrelerimiz &amp;ldquo;application/x-www-form-urlencoded&amp;rdquo; olarak g&amp;ouml;nderilmeli.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Bunu sağlamak i&amp;ccedil;in aşağıdaki fonksiyonu yazıyoruz bu fonksiyonu Amazonun SDK&amp;rsquo;sından aldım.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;internal static string GetParametersAsString(IDictionary&amp;lt;string, string&amp;gt; parameters)
{
    StringBuilder data = new StringBuilder(512);
    foreach (string key in (IEnumerable)parameters.Keys)
    {
        string value = parameters[key];
        if (value != null)
        {
            data.Append(key);
            data.Append('=');
            data.Append(UrlEncode(value, false));
            data.Append('&amp;amp;');
        }
    }
    string result = data.ToString();
    return result.Remove(result.Length - 1);
}&lt;/pre&gt;
&lt;p&gt;Bu fonksiyonu yazdıktan sonra basit bir HttpWebRequest ile sunucuyu sorgulayabiliriz artık. Bunun i&amp;ccedil;in aşağıdaki kodu kullanacağız.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public static void Query(IDictionary&amp;lt;string, string&amp;gt; values, Action callback)
{
    var serviceUrl = Configuration.SimpleDbServiceUrl;

    ConfigureParameters(values);
    var queryString = Helpers.GetParametersAsString(values);
    var queryData = Encoding.UTF8.GetBytes(queryString);
    var request = HttpWebRequest.CreateHttp(serviceUrl);

    request.Method = "POST";
    request.ContentType = Helpers.UrlEncodedContent;

    var asyncResult = request.BeginGetRequestStream((getRequestStreamAsyncResult) =&amp;gt;
    {
        using (var stream = request.EndGetRequestStream(getRequestStreamAsyncResult))
        {
            stream.Write(queryData, 0, queryData.Length);
        }

        request.BeginGetResponse((getResponseAsyncResult) =&amp;gt;
        {

            var response = request.EndGetResponse(getResponseAsyncResult);

            using (var stream = response.GetResponseStream())
            using (var streamReader = new StreamReader(stream))
            {
                callback(streamReader.ReadToEnd());
            }

        }, null);
    }, null);
}&lt;/pre&gt;
&lt;p&gt;Yukarıda yazdığımız bu fonksiyon AWS&amp;rsquo;ye istediğimiz sorguyu g&amp;ouml;nderecek ve eğer bir hata oluşmazsa bir XML elde edecektir. Biz&amp;rsquo;de bu XML&amp;rsquo;i işleyerek istediğmiz veriyi alacağız.&lt;/p&gt;
&lt;h2&gt;SimpleDB Temelleri&lt;/h2&gt;
&lt;p&gt;SimpleDB ilişkisel olmayan basit bir veritabanı sistemidir. Veriler domain adı verilen yapılarda saklanırlar. (MSSQL&amp;rsquo;deki Table'lara eşdeğer &amp;ndash; neredeyse)&lt;/p&gt;
&lt;p&gt;&amp;Ouml;rneğin buradan sonrasına devam edebilmek i&amp;ccedil;in, l&amp;uuml;tfen birka&amp;ccedil; tane domain oluşturun.&lt;/p&gt;
&lt;p&gt;Şimdi bazı SimpleDB aksiyonlarını inceleyelim.&lt;/p&gt;
&lt;h2&gt;ListDomains&lt;/h2&gt;
&lt;p&gt;Bu operasyon ile ilgili daha detaylı bilgiyi &lt;a href="http://docs.amazonwebservices.com/AmazonSimpleDB/latest/DeveloperGuide/index.html?SDB_API_ListDomains.html"&gt;Amazon&amp;rsquo;un dok&amp;uuml;mantasyonundan&lt;/a&gt; okuyabilirsiniz.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;Haplois.Cloud.AWS.Common.REST.Query(
    new Dictionary&amp;lt;string, string&amp;gt;()
    {
        {"Action", "ListDomains"}
    }, (sonuc) =&amp;gt;
    {
        // sonu&amp;ccedil; geldi    
    }
);&lt;/pre&gt;
&lt;p&gt;Yukarıdaki gibi bir kod ile bu aksiyonu &amp;ccedil;ağırabilirsiniz.&amp;nbsp; Bu asenkron &amp;ccedil;alışan bir işlen olduğundan sunucu yanıt verdiğinde ilki kod par&amp;ccedil;acığı &amp;ccedil;alışacaktır.&lt;/p&gt;
&lt;p&gt;Query metoduna biraz dikkat ederseniz parametre olarak aldığı &amp;ldquo;callback&amp;rdquo; isimli delegate&amp;rsquo;i işlem bitince &amp;ccedil;ağırıyor. Ancak bu &amp;ccedil;ağrı UIThread&amp;rsquo;de olmadığından doğrudan UIThread&amp;rsquo;e ulaşmaya &amp;ccedil;alışırsanız &amp;ldquo;UnauthorizedAccessException&amp;rdquo; istisnası ile karşılaşırsınız. Bu hata ile karşılaşmamak i&amp;ccedil;in UIThread&amp;rsquo;a Dispatcher aracılığı ile erişmelisiniz. Bunun bir &amp;ouml;rneğini ekleyeceğim kodda g&amp;ouml;rebilirisiniz.&lt;/p&gt;
&lt;p&gt;ListDomains aksiyonunun cevabı aşağıdaki gibi birşey olmalı:&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;?xml version="1.0"?&amp;gt;
&amp;lt;ListDomainsResponse xmlns="http://sdb.amazonaws.com/doc/2009-04-15/"&amp;gt;
  &amp;lt;ListDomainsResult&amp;gt;
    &amp;lt;DomainName&amp;gt;domain1&amp;lt;/DomainName&amp;gt;
    &amp;lt;DomainName&amp;gt;domain2&amp;lt;/DomainName&amp;gt;
    &amp;lt;DomainName&amp;gt;domain3&amp;lt;/DomainName&amp;gt;
  &amp;lt;/ListDomainsResult&amp;gt;
  &amp;lt;ResponseMetadata&amp;gt;
    &amp;lt;RequestId&amp;gt;5a3e68aa-0ad4-6b6d-1f86-c93c9f1b142b&amp;lt;/RequestId&amp;gt;
    &amp;lt;BoxUsage&amp;gt;0.0000071759&amp;lt;/BoxUsage&amp;gt;
  &amp;lt;/ResponseMetadata&amp;gt;
&amp;lt;/ListDomainsResponse&amp;gt;&lt;/pre&gt;
&lt;p&gt;Bu cevabın &amp;ldquo;ResponseMetadata&amp;rdquo; kısmı t&amp;uuml;m SimpleDb cevapları i&amp;ccedil;in ortaktır.&lt;/p&gt;
&lt;p&gt;Her defasında bu işlemlerle uğraşmamak i&amp;ccedil;in bu cevapları bizim i&amp;ccedil;in işleyecek olan Base ve ResponseBase isimli iki sınıf yazdım. Bu sınıfların kodları olduk&amp;ccedil;a basit, isterseniz &amp;ouml;rnek kodlar i&amp;ccedil;erisinde inceleyebilirisiniz.&lt;/p&gt;
&lt;h2&gt;Select&lt;/h2&gt;
&lt;p&gt;Bu operasyon ile ilgili daha detaylı bilgiyi &lt;a href="http://docs.amazonwebservices.com/AmazonSimpleDB/latest/DeveloperGuide/index.html?SDB_API_Select.html"&gt;Amazon&amp;rsquo;un dok&amp;uuml;mantasyonundan&lt;/a&gt; okuyabilirsiniz.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;Haplois.Cloud.AWS.Common.REST.Query(
    new Dictionary&amp;lt;string, string&amp;gt; 
    { 
        { "Action", "Select" }, 
        { "SelectExpression", "SELECT * FROM domain1" },
        { "ConsistentRead", "true" },
    },
    (o) =&amp;gt;
    {
        Dispatcher.BeginInvoke(() =&amp;gt;
        {
            textBlock1.Text = o;
        });
    }
);&lt;/pre&gt;
&lt;p&gt;Bu aksiyonu yukarıdaki gibi bir kodla &amp;ccedil;ağırdığınızda aşağıdaki gibi bir yanıt alırsınız:&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;?xml version="1.0"?&amp;gt;
&amp;lt;SelectResponse xmlns="http://sdb.amazonaws.com/doc/2009-04-15/"&amp;gt;
  &amp;lt;SelectResult&amp;gt;
    &amp;lt;Item&amp;gt;
      &amp;lt;Name&amp;gt;rowName1&amp;lt;/Name&amp;gt;
      &amp;lt;Attribute&amp;gt;
        &amp;lt;Name&amp;gt;attribute1&amp;lt;/Name&amp;gt;
        &amp;lt;Value&amp;gt;100300&amp;lt;/Value&amp;gt;
      &amp;lt;/Attribute&amp;gt;
      &amp;lt;Attribute&amp;gt;
        &amp;lt;Name&amp;gt;attribute2&amp;lt;/Name&amp;gt;
        &amp;lt;Value&amp;gt;3&amp;lt;/Value&amp;gt;
      &amp;lt;/Attribute&amp;gt;
    &amp;lt;/Item&amp;gt;
    &amp;lt;Item&amp;gt;
      &amp;lt;Name&amp;gt;rowName2&amp;lt;/Name&amp;gt;
      &amp;lt;Attribute&amp;gt;
        &amp;lt;Name&amp;gt;attribute1&amp;lt;/Name&amp;gt;
        &amp;lt;Value&amp;gt;100300&amp;lt;/Value&amp;gt;
      &amp;lt;/Attribute&amp;gt;
      &amp;lt;Attribute&amp;gt;
        &amp;lt;Name&amp;gt;attribute3&amp;lt;/Name&amp;gt;
        &amp;lt;Value&amp;gt;4&amp;lt;/Value&amp;gt;
      &amp;lt;/Attribute&amp;gt;
    &amp;lt;/Item&amp;gt;
  &amp;lt;/SelectResult&amp;gt;
  &amp;lt;ResponseMetadata&amp;gt;
    &amp;lt;RequestId&amp;gt;8f47891c-2a21-e0d6-7e9f-0b5f727d1d29&amp;lt;/RequestId&amp;gt;
    &amp;lt;BoxUsage&amp;gt;0.0000228616&amp;lt;/BoxUsage&amp;gt;
  &amp;lt;/ResponseMetadata&amp;gt;
&amp;lt;/SelectResponse&amp;gt;&lt;/pre&gt;
&lt;p&gt;Bu XML&amp;rsquo;i işlememize yardımcı olması i&amp;ccedil;in bir ka&amp;ccedil; sınıf yazdım. Bunlardan ilki SelectResponse sınıfı; bu sınıf&amp;nbsp; XML&amp;rsquo;i işliyor ve gelen &amp;ouml;ğeleri saklıyor. İkincisi olan DataRow sınıfı ise XML&amp;rsquo;deki bir Item&amp;rsquo;ı ve onun Attribute&amp;rsquo;larını temsil ediyor. Bu sınıfın kodlarını incelemek isterseniz &amp;ouml;rnek kodlar i&amp;ccedil;erisinde bu sınıflar da mevcut.&lt;/p&gt;
&lt;p&gt;Son olarak SimpleDbClient isimli bir sınıf daha yazdım. Bu sınıf SimpleDb &amp;uuml;zerinde yapabilceğimiz aksiyonları i&amp;ccedil;erecek. Şuan sadece Select aksiyonunu i&amp;ccedil;eriyor.&lt;/p&gt;
&lt;p&gt;Bu g&amp;uuml;nl&amp;uuml;k de bu kadar, devamı yarın. Yarın ki yazımda da SimpleDb &amp;uuml;zerinde Update ve Insert işlemlerini yazacağım.&lt;/p&gt;
&lt;p&gt;Bu makale i&amp;ccedil;in &amp;ouml;rnek kodları &lt;a href="http://muhammedbaykal.com/FILES%2f2011%2f11%2fAmazonAWSSample2.rar.axdx"&gt;buradan&lt;/a&gt; indirebilirsiniz.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hXAbbiuqn2rB4vcoJ2XgYTyHP7c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hXAbbiuqn2rB4vcoJ2XgYTyHP7c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hXAbbiuqn2rB4vcoJ2XgYTyHP7c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hXAbbiuqn2rB4vcoJ2XgYTyHP7c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mbaykal/~4/7JprqnMro3U" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/mbaykal/~3/7JprqnMro3U/post.aspx</link>
      <author>medeni@muhammedbaykal.com</author>
      <comments>http://muhammedbaykal.com/post/Windows-Phone-75-Amazon-AWS-SimpleDb-Part-II.aspx#comment</comments>
      <guid isPermaLink="false">http://muhammedbaykal.com/post.aspx?id=401d765a-7da2-44b8-8c6f-63c6249c8018</guid>
      <pubDate>Fri, 18 Nov 2011 02:27:00 +0200</pubDate>
      <category>C#</category>
      <category>Cloud</category>
      <category>Windows Phone</category>
      <dc:publisher>mbaykal</dc:publisher>
      <pingback:server>http://muhammedbaykal.com/pingback.axd</pingback:server>
      <pingback:target>http://muhammedbaykal.com/post.aspx?id=401d765a-7da2-44b8-8c6f-63c6249c8018</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://muhammedbaykal.com/trackback.axd?id=401d765a-7da2-44b8-8c6f-63c6249c8018</trackback:ping>
      <wfw:comment>http://muhammedbaykal.com/post/Windows-Phone-75-Amazon-AWS-SimpleDb-Part-II.aspx#comment</wfw:comment>
      <wfw:commentRss>http://muhammedbaykal.com/syndication.axd?post=401d765a-7da2-44b8-8c6f-63c6249c8018</wfw:commentRss>
    <feedburner:origLink>http://muhammedbaykal.com/post.aspx?id=401d765a-7da2-44b8-8c6f-63c6249c8018</feedburner:origLink></item>
    <item>
      <title>Windows Phone 7.5 ile AWS Kullanmak - Bölüm 1</title>
      <description>&lt;p&gt;Her ne kadar Windows Phone ile Azure kullanma taraftarı da olsam; bazen zaruretten başka &amp;ccedil;&amp;ouml;z&amp;uuml;mleri de kullanmak zorunda kalabilirsiniz. &amp;Ouml;rneğin bir iOS ya da Android uygulamasının Windows Phone s&amp;uuml;r&amp;uuml;m&amp;uuml;n&amp;uuml; geliştiriyorsanız ve bu uygulamalar zaten &lt;a href="http://aws.amazon.com/"&gt;AWS&lt;/a&gt; kullanıyorsa, işte o aşamada Azure kullanma şansınız pek kalmıyor.&lt;/p&gt;
&lt;p&gt;Amazon; Android ve iOS i&amp;ccedil;in bir SDK yayınlamış durumda. Aslına bakarsanız &lt;a href="http://aws.amazon.com/net/"&gt;Windows ve .Net&lt;/a&gt; i&amp;ccedil;in de bir SDK&amp;rsquo;sı var. Bu SDK&amp;rsquo;yı indirirseniz bir Windows Phone uygulamasına referans edemeyeceğinizi fark edeceksiniz.&lt;/p&gt;
&lt;p&gt;Biraz daha inat&amp;ccedil;ıysanız belki kaynak kodunu indirip, Windows Phone i&amp;ccedil;in derlemeye &amp;ccedil;alışacaksınız ama SDK&amp;rsquo;nın Hastable, ArrayList, SecureString ve HashAlgoritm gibi Windows Phone tarafında desteklenmeyen bir s&amp;uuml;r&amp;uuml; nesne kullandığını fark edeceksiniz ve pes edeceksiniz.&lt;/p&gt;
&lt;p&gt;Hayır! Tabii ki de pes etmeyip, kendi SDK&amp;rsquo;msınızı yazacaksınız.&lt;/p&gt;
&lt;p&gt;Bir ka&amp;ccedil; par&amp;ccedil;a olarak d&amp;uuml;ş&amp;uuml;nd&amp;uuml;ğ&amp;uuml;m bu yazının ilk kısmında &lt;a href="http://aws.amazon.com/simpledb/"&gt;Amazon SimpleDB&lt;/a&gt;&amp;rsquo;yi anlatacağım.&lt;/p&gt;
&lt;h2&gt;Amazon SimpleDB Nedir?&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Amazon SimpleDB is a highly available, flexible, and scalable non-relational data store that offloads the work of database administration. Developers simply store and query data items via web services requests, and Amazon SimpleDB does the rest.&lt;/p&gt;
&lt;p&gt;Unbound by the strict requirements of a relational database, Amazon SimpleDB is optimized to provide high availability, flexibility, and ease of scalability with little or no administrative burden. Behind the scenes, Amazon SimpleDB creates and manages multiple geographically distributed replicas of your data automatically to enable high availability and data durability. The service charges you only for the resources actually consumed in storing your data and serving your requests. You can change your data model on the fly, and data is automatically indexed for you. With Amazon SimpleDB, you can focus on application development without worrying about infrastructure provisioning, high availability, software maintenance, schema and index management, or performance tuning.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yukarıda ki tanımı Amazon&amp;rsquo;un kendi sitesinden arakladım ve hayır T&amp;uuml;rk&amp;ccedil;e&amp;rsquo;ye &amp;ccedil;evirmeyeceğim ;)&lt;/p&gt;
&lt;h2&gt;Biraz Daha Hazırlık&lt;/h2&gt;
&lt;p&gt;SimpleDB, &lt;a href="http://aws.amazon.com/simpledb/#pricing"&gt;belli bir seviyeye kadar&lt;/a&gt; &amp;uuml;cretsiz kullanım sağlıyor. Eğer bir AWS hesabınız yoksa &lt;a href="https://aws-portal.amazon.com/gp/aws/developer/registration"&gt;&amp;uuml;cretsiz olarak bir tane oluşturabilir&lt;/a&gt; ve SimpleDB kullanmaya başlayabilirsiniz.&lt;/p&gt;
&lt;p&gt;Veritabanına bağlanabilmek i&amp;ccedil;in AWS bize iki anahtar veriyor. Bunlar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Access Key ID: 20 karakterlik sayı ve rakamlardan bir dizi&lt;/li&gt;
&lt;li&gt;Secret Key ID: 40 karakterlik sayı, rakam ve sembollerden oluşan bir dizi. Bu bilginin gizli kalması gerektiğini, sizden ve Amazon&amp;rsquo;dan başka hi&amp;ccedil; kimsenin bilmemesi gerektiğini unutmayın!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Hazırlığın Son Kısmı&lt;/h2&gt;
&lt;p&gt;Kodlama s&amp;uuml;resince kolaylık sağlaması i&amp;ccedil;in yukarıdaki bilgileri saklayacağım bir sınıf tanımlayacağım; ama siz bu bilgileri daha g&amp;uuml;venli bir şekilde saklamalısınız.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;namespace Haplois.Cloud.AWS.Common
{
    public class Configuration
    {
        public const string Key = "BFSCUDCFRFDGCFDEUFDV";
        public const string SecretKey = "***secret key***";

        public const string ServiceVersion = "2009-04-15";
        public const string SimpleDbServiceUrl = "https://sdb.amazonaws.com";
        public const string SignatureVersion = "2";
        public const string SignatureMethod = "HmacSHA256";
    }
}&lt;/pre&gt;
&lt;p&gt;Yukarıdaki yukarıda size hen&amp;uuml;z bahsetmediğim bir ka&amp;ccedil; tanımlama var bunlar;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ServiceVersion: Amazon AWS servislerini versiyonlayarak geriye uyum sağlıyor. Bizim bu &amp;ouml;rneklerde kullanacağımız versiyonu sakladığımız sabitimiz.&lt;/li&gt;
&lt;li&gt;SignatureVersion: Servise g&amp;ouml;ndereceğimiz istekleri imzalayacağımız algoritmanın versiyonunu burada saklıyoruz.&lt;/li&gt;
&lt;li&gt;SignatureMethod: Kullanacağımız imzalama metodu.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;İstekleri İmzalama&lt;/h2&gt;
&lt;p&gt;Amazon Web Servislerini sorgulayabilmek i&amp;ccedil;in kimliğimizi doğrulamamız gerekli. Bunu da istekleri imzlayarak sağlıyoruz. SimpleDB&amp;rsquo;ye kimlik doğrulamak i&amp;ccedil;in imzamızı &amp;uuml;&amp;ccedil; basit aşamada oluşturabiliyoruz. Bu aşamalar:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Servise g&amp;ouml;ndereceğimiz REST isteğini oluşturuyoruz.&lt;/li&gt;
&lt;li&gt;Bu isteğe g&amp;ouml;re imzalamamız gereken metni oluşturuyor ve bu metni &lt;a href="http://www.faqs.org/rfcs/rfc2104.html"&gt;HMAC&lt;/a&gt;&amp;rsquo;a g&amp;ouml;re imzalıyoruz.&lt;/li&gt;
&lt;li&gt;İmzayı ve Access Key ID&amp;rsquo;yi REST isteğine ekleyip; isteği AWS&amp;rsquo;ye g&amp;ouml;nderiyoruz.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;REST İsteğini Oluşturma&lt;/h3&gt;
&lt;p&gt;Bu en kolay kısmı. REST isteği bu aşamada key&amp;rsquo;ler ve value&amp;rsquo;lar dan oluşan bir Dictionary aslında. Bu istek &amp;ccedil;ağıracağımız fonksiyona g&amp;ouml;re bazı değişiklikler i&amp;ccedil;erse de aşağıdaki değerler s&amp;uuml;rekli bulunmak zorunda.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AWSAccessKeyId&lt;/li&gt;
&lt;li&gt;SignatureVersion&lt;/li&gt;
&lt;li&gt;SignatureMethod&lt;/li&gt;
&lt;li&gt;Version&lt;/li&gt;
&lt;li&gt;Timestamp&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bunlardan ilk d&amp;ouml;rd&amp;uuml;n&amp;uuml; Configuration sınıfımızda tanımladık zaten. Timestamp ise ISO8601 (&amp;ldquo;yyyy-MM-dd\\THH:mm:ss.fff\\Z&amp;rdquo;) formatında tarihi ifade ediyor. Bu tarihi aşağıdaki kodla kolayca oluşturabiliriz:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public const string ISO8601DateFormat = "yyyy-MM-dd\\THH:mm:ss.fff\\Z";

public static string FormattedCurrentTimestampISO8601
{
    get
    {
        return GetFormattedTimestampISO8601(0);
    }
}

public static string GetFormattedTimestampISO8601(int minutesFromNow)
{
    DateTime dateTime = DateTime.UtcNow.AddMinutes(minutesFromNow);
    DateTime formatted = new DateTime(
        dateTime.Year,
        dateTime.Month,
        dateTime.Day,
        dateTime.Hour,
        dateTime.Minute,
        dateTime.Second,
        dateTime.Millisecond,
        DateTimeKind.Local
        );

    return formatted.ToString(
        ISO8601DateFormat,
        CultureInfo.InvariantCulture
        );
}&lt;/pre&gt;
&lt;p&gt;Yukarıdaki kodu, AWS&amp;rsquo;nin .Net SDK&amp;rsquo;sından kopyaladım.&lt;/p&gt;
&lt;p&gt;SignatureVersion i&amp;ccedil;in g&amp;uuml;ncel değer ben bu yazıyı yazdığım sırada 2&amp;rsquo;ydi. 1 numaralı versiyon eski ve yeni s&amp;uuml;r&amp;uuml;mlerde destelenmeyecek.&lt;/p&gt;
&lt;p&gt;SignatureMethod kullandığınız algoritmaya g&amp;ouml;re &amp;ldquo;HmacSHA1&amp;rdquo; ya da &amp;ldquo;HmacSHA256&amp;rdquo; olabilir. Ben SHA256&amp;rsquo;ya daha fazla g&amp;uuml;vendiğimden &amp;ldquo;HmacSHA256&amp;rdquo; kullanıyorum; ama tamamen duygusal.&lt;/p&gt;
&lt;h3&gt;İmzalanacak Metni Oluşturma&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;REST isteğinde AWS&amp;rsquo;ye g&amp;ouml;ndereceğimiz parametreleri alfabetik olarak sıralayın.&lt;/li&gt;
&lt;li&gt;Parametre değerlerini ve isimlerini şu kurallara g&amp;ouml;re d&amp;uuml;zenleyin:&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.faqs.org/rfcs/rfc3986.html"&gt;RFC 3986&lt;/a&gt;&amp;rsquo;da rezerve edilmemiş herhangi bir karakter encode edilmemeli. (A-Z ve a-z İngilizce harfler, 0-9 arası rakamlar, tire &amp;ldquo;-&amp;rdquo;, alt&amp;ccedil;izgi &amp;ldquo;_&amp;rdquo;, nokta ve tilde &amp;ldquo;~&amp;rdquo; )&lt;/li&gt;
&lt;li&gt;Encode edilecek karakterlerin ASCII&amp;rsquo;si hex olarak % işaretinden sonra 0-F arası rakamlar kullanılarak encode edilmeli. (%9a ger&amp;ccedil;ersiz, %9A ge&amp;ccedil;erli)&lt;/li&gt;
&lt;li&gt;UTF-8 karakterler byte byte encode edilmeli (%XY%ZA&amp;hellip;)&lt;/li&gt;
&lt;li&gt;Boşluk karakteri %20 olarak encode edilmeli (HttpUtility.UrlEncode&amp;rsquo;un yaptığı gibi &amp;ldquo;+&amp;rdquo; olarak değil)&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;Parametreleri ve değerlerini &amp;ldquo;=&amp;rdquo; ile ayırın, değeri boş ise bile &amp;ldquo;=&amp;rdquo; kullanın.&lt;/li&gt;
&lt;li&gt;Parametreleri birbirinden &amp;ldquo;&amp;amp;&amp;rdquo; ile ayrın.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;Not: Alfabetik olarak ilk sırada olmasa bile ASWAccessKeyId en başta olmalı.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;Ouml;ncelikle kendi UrlEncode fonksiyonumuzu yazmalıyız. Bu fonksiyonu doğrudan Amazon SDK&amp;rsquo;sından aldım.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public const string ValidUrlCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~";

public static string UrlEncode(string data, bool path)
{
    StringBuilder encoded = new StringBuilder(data.Length * 2);
    string unreservedChars = String.Concat(
        ValidUrlCharacters,
        (path ? "/:" : "")
        );

    foreach (char symbol in System.Text.Encoding.UTF8.GetBytes(data))
    {
        if (unreservedChars.IndexOf(symbol) != -1)
        {
            encoded.Append(symbol);
        }
        else
        {
            encoded.Append("%").Append(String.Format("{0:X2}", (int)symbol));
        }
    }

    return encoded.ToString();
}&lt;/pre&gt;
&lt;p&gt;Bu kadar a&amp;ccedil;ıklamadan sonra imzalayacağımız metni aşağıdaki kod ile oluşturabiliriz.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public static string CalculateStringToSignSimbleDb(IDictionary&amp;lt;string, string&amp;gt; parameters, string serviceUrl)
{
    StringBuilder data = new StringBuilder("POST\n"); ;

    Uri endpoint = new Uri(serviceUrl);

    data.Append(endpoint.Host.ToLowerInvariant());
    data.Append("\n");
    string uri = endpoint.AbsolutePath;
    if (uri == null || uri.Length == 0)
    {
        uri = "/";
    }

    data.Append(uri);
    data.Append("\n");

    if (parameters.ContainsKey("AWSAccessKeyId"))
    {
        data.Append(Helpers.UrlEncode("AWSAccessKeyId", false));
        data.Append("=");

        data.Append(Helpers.UrlEncode(parameters["AWSAccessKeyId"], false));
        data.Append("&amp;amp;");
    }

    foreach (KeyValuePair pair in parameters.OrderBy(p =&amp;gt; p.Key.ToUpperInvariant()))
    {
        if (pair.Key == "AWSAccessKeyId") continue;

        if (pair.Value != null)
        {
            data.Append(Helpers.UrlEncode(pair.Key, false));
            data.Append("=");
            data.Append(Helpers.UrlEncode(pair.Value, false));
            data.Append("&amp;amp;");
        }
    }


    string result = data.ToString();
    return result.Remove(result.Length - 1);
}&lt;/pre&gt;
&lt;p&gt;Burada &amp;ldquo;parameters&amp;ldquo; parametresi REST isteğimizde g&amp;ouml;ndereceğimiz parametreleri, &amp;ldquo;serviceUrl&amp;rdquo; ise bağlanacağımız servisin tam adresini i&amp;ccedil;eriyor. Şu aşamada bu adres, Configuration.SimpleDbServiceUrl&amp;rsquo;e eşit.&lt;/p&gt;
&lt;p&gt;Bu metni oluşturmadan &amp;ouml;nce REST ve sonra yapmamız gereken işlemler i&amp;ccedil;in aşağıdaki kodu yazıyoruz&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;private static void ConfigureParameters(IDictionary&amp;lt;string, string&amp;gt; values)
{
    if (values.ContainsKey("Signature"))
    {
        values.Remove("Signature");
    }

    values["AWSAccessKeyId"] = Configuration.Key;
    values["SignatureVersion"] = Configuration.SignatureVersion;
    values["SignatureMethod"] = Configuration.SignatureMethod;
    values["Timestamp"] = Helpers.FormattedCurrentTimestampISO8601;
    values["Version"] = Configuration.ServiceVersion;

    var sign = CalculateStringToSignSimbleDb(values, Configuration.SimpleDbServiceUrl);
    var auth = Helpers.HMACSign(sign, Configuration.SecretKey, HashAlgorithmType.SHA256);

    values["Signature"] = auth;
}&lt;/pre&gt;
&lt;p&gt;Bu kodu kısaca a&amp;ccedil;ıklayayım isterseniz. &amp;Ouml;ncelikle, parametrelerimiz arasında istek imzalanmadan &amp;ouml;nce &amp;ldquo;Signature&amp;rdquo; bulunamaz, bu nedenle eğer varsa siliyoruz. Eklenmesi zorunlu olan değerleri ekliyor ya da zaten varsalar g&amp;uuml;ncelliyoruz. Bu aşamada, imzalayacağımız metni de oluşturuyor ve HMAC ile imzalıyoruz.&lt;/p&gt;
&lt;p&gt;İmzalama işleminden sonra hesapladığımız değeri &amp;ldquo;Signature&amp;rdquo; parametresi olarak isteğe ekliyoruz.&lt;/p&gt;
&lt;p&gt;İ&amp;ccedil;eriği HMAC ile imzalamak i&amp;ccedil;in aşağıdaki kodu kullanıyoruz:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public static string HMACSign(string dataToSign, string key, HashAlgorithmType algoritm)
{
    var hashKey = Encoding.UTF8.GetBytes(key);
    HMAC hasher = null;

    switch (algoritm)
    {
        case HashAlgorithmType.SHA1:
            hasher = new HMACSHA1(hashKey);
            break;

        case HashAlgorithmType.SHA256:
            hasher = new HMACSHA256(hashKey);
            break;
    }


    var hashedData = hasher.ComputeHash(Encoding.UTF8.GetBytes(dataToSign));

    return Convert.ToBase64String(hashedData);
}&lt;/pre&gt;
&lt;p&gt;Bu fonksiyon aşağıdaki enum'a ihtiya&amp;ccedil; duyuyor:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public enum HashAlgorithmType
{
    SHA1,
    SHA256
}&lt;/pre&gt;
&lt;p&gt;Bu makaledeki kodları &lt;a href="http://muhammedbaykal.com/FILES%2f2011%2f11%2fAmazonAWSSample.rar.axdx"&gt;buradan&lt;/a&gt; indirebilirsiniz.&lt;/p&gt;
&lt;p&gt;Devamı yarın&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bEiOX8YW1tesScnNo2RxhYXLjaw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bEiOX8YW1tesScnNo2RxhYXLjaw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bEiOX8YW1tesScnNo2RxhYXLjaw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bEiOX8YW1tesScnNo2RxhYXLjaw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mbaykal/~4/QK9NHE_mxlY" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/mbaykal/~3/QK9NHE_mxlY/post.aspx</link>
      <author>medeni@muhammedbaykal.com</author>
      <comments>http://muhammedbaykal.com/post/Windows-Phone-75-Amazon-AWS-SimpleDb-Part-I.aspx#comment</comments>
      <guid isPermaLink="false">http://muhammedbaykal.com/post.aspx?id=8344158e-1621-495b-8279-0196115f604e</guid>
      <pubDate>Fri, 18 Nov 2011 00:44:00 +0200</pubDate>
      <category>C#</category>
      <category>Cloud</category>
      <category>Windows Phone</category>
      <dc:publisher>mbaykal</dc:publisher>
      <pingback:server>http://muhammedbaykal.com/pingback.axd</pingback:server>
      <pingback:target>http://muhammedbaykal.com/post.aspx?id=8344158e-1621-495b-8279-0196115f604e</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://muhammedbaykal.com/trackback.axd?id=8344158e-1621-495b-8279-0196115f604e</trackback:ping>
      <wfw:comment>http://muhammedbaykal.com/post/Windows-Phone-75-Amazon-AWS-SimpleDb-Part-I.aspx#comment</wfw:comment>
      <wfw:commentRss>http://muhammedbaykal.com/syndication.axd?post=8344158e-1621-495b-8279-0196115f604e</wfw:commentRss>
    <feedburner:origLink>http://muhammedbaykal.com/post.aspx?id=8344158e-1621-495b-8279-0196115f604e</feedburner:origLink></item>
    <item>
      <title>ELN4105 Elektrik Makineleri Ders Notları</title>
      <description>&lt;p&gt;&amp;Ouml;ğr. G&amp;ouml;r. Dr. Sevim KURTULDU'nun &lt;strong&gt;ELN4105&lt;/strong&gt; Elektrik Makineleri dersinin notlarını &lt;a href="#"&gt;buradan&lt;/a&gt; indirebilirsiniz.&lt;/p&gt;
&lt;p&gt;Notlar hocanın isteği ile siteden kaldırılmıştır.&lt;/p&gt;

&lt;!-- /locker/f030872d-f855-4df8-bd45-2a586ddaf43d/elektrik-makineleri/elmak.rar --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/stW25RpaATIWJiRq7ETnl0ZtnkU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/stW25RpaATIWJiRq7ETnl0ZtnkU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/stW25RpaATIWJiRq7ETnl0ZtnkU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/stW25RpaATIWJiRq7ETnl0ZtnkU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mbaykal/~4/zNkwl3Nz9vE" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/mbaykal/~3/zNkwl3Nz9vE/post.aspx</link>
      <author>medeni@muhammedbaykal.com</author>
      <comments>http://muhammedbaykal.com/post/ELN410-Elektrik-Makineleri-Ders-Notlari.aspx#comment</comments>
      <guid isPermaLink="false">http://muhammedbaykal.com/post.aspx?id=b63364a2-aa62-4022-91ef-d6efc51f6b28</guid>
      <pubDate>Tue, 11 Oct 2011 15:06:00 +0200</pubDate>
      <category>Elektronik Mühendisliği</category>
      <dc:publisher>mbaykal</dc:publisher>
      <pingback:server>http://muhammedbaykal.com/pingback.axd</pingback:server>
      <pingback:target>http://muhammedbaykal.com/post.aspx?id=b63364a2-aa62-4022-91ef-d6efc51f6b28</pingback:target>
      <slash:comments>9</slash:comments>
      <trackback:ping>http://muhammedbaykal.com/trackback.axd?id=b63364a2-aa62-4022-91ef-d6efc51f6b28</trackback:ping>
      <wfw:comment>http://muhammedbaykal.com/post/ELN410-Elektrik-Makineleri-Ders-Notlari.aspx#comment</wfw:comment>
      <wfw:commentRss>http://muhammedbaykal.com/syndication.axd?post=b63364a2-aa62-4022-91ef-d6efc51f6b28</wfw:commentRss>
    <feedburner:origLink>http://muhammedbaykal.com/post.aspx?id=b63364a2-aa62-4022-91ef-d6efc51f6b28</feedburner:origLink></item>
    <item>
      <title>IIS 7, Framework 4.0 Bad Module Hatası Çözümü</title>
      <description>&lt;p&gt;Ge&amp;ccedil;enlerde bir işim i&amp;ccedil;in gerektiğinden Visual Studio 2008 kurdum. Bu işlemin ardından IIS 7.5&amp;rsquo;daki Framework 4.0 projeleri d&amp;uuml;zg&amp;uuml;n &amp;ccedil;alışmamaya başladı. Onlardan birini &amp;ccedil;alıştırmaya &amp;ccedil;alışınca aşağıdaki bir hata almaya başladım.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;HTTP Error 500.21 - Internal Server Error 
Handler "PageHandlerFactory-Integrated" has a bad module "ManagedPipelineHandler" in its module list.&lt;/pre&gt;
&lt;p&gt;İnternette biraz araştırma yaptıktan hatanın VS2008 kurulumunu Framework 4.0 konfig&amp;uuml;rasyonunun yarısını bozduğunu &amp;ouml;ğrendim. Bu hatayı Framework 4.0 kurulumunu onarak muhtemelen &amp;ccedil;&amp;ouml;zebilirsiniz*, bu onarımı aşağıdaki komutlardan bilgisayarınıza uygun olanını y&amp;ouml;netici olarak başlatılmış bir komut satırında yazarak yapabilirsiniz:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;x86 olarak kurulmuş Windows&amp;rsquo;ta:
%windir%\Microsoft.NET\Framework\v4.0.30319\SetupCache\Client\setup.exe /repair /x86 /x64 /ia64 /parameterfolder Client /norestart&lt;/pre&gt;
&lt;pre class="brush: c-sharp;"&gt;x64 olarak kurulmuş Windows&amp;rsquo;ta:
%windir%\Microsoft.NET\Framework64\v4.0.30319\SetupCache\Client\setup.exe /repair /x86 /x64 /ia64 /parameterfolder Client /norestart&lt;/pre&gt;
&lt;p&gt;Framework 4.0&amp;rsquo;ın kurulumu, onarımı ve başlangı&amp;ccedil; komutlarıyla ilgili ayrıntılı bilgi MSDN&amp;rsquo;de mevcut.Onarma yaklaşık bir ka&amp;ccedil; dakika s&amp;uuml;recek. Onarma işlemi tamamlandıktan sonra IIS&amp;rsquo;i yeniden başlatın ve ardından sorununuzun &amp;ccedil;&amp;ouml;z&amp;uuml;l&amp;uuml;p &amp;ccedil;&amp;ouml;z&amp;uuml;lmediğini kontrol edin. Sorun &amp;ccedil;&amp;ouml;z&amp;uuml;lmemişse; ASP .Net 4.0&amp;rsquo;ı tekrar IIS&amp;rsquo;e tanıtmak i&amp;ccedil;in aşağıdaki komutlardan size uygun olanını y&amp;ouml;netici olarak başlatılmış bir komut satırında yazın:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;x86 olarak kurulmuş Windows&amp;rsquo;ta:
%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe /i&lt;/pre&gt;
&lt;pre class="brush: c-sharp;"&gt;x64 olarak kurulmuş Windows&amp;rsquo;ta:
%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe /i&lt;/pre&gt;
&lt;p&gt;Bu y&amp;ouml;ntemlerden ikinci &amp;ldquo;Handler &amp;lsquo;PageHandlerFactory-Integrated&amp;rsquo; has a bad module &amp;lsquo;ManagedPipelineHandler&amp;rsquo; in its module list.&amp;rdquo; hatasını d&amp;uuml;zeltti; ancak ilk &amp;ouml;nce ilkini &amp;ccedil;alıştırmanızı tavsiye ederim. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/n3T1tlUsaoou9BUF_xVplcMvgyA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n3T1tlUsaoou9BUF_xVplcMvgyA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/n3T1tlUsaoou9BUF_xVplcMvgyA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n3T1tlUsaoou9BUF_xVplcMvgyA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mbaykal/~4/0KyWJwc-aNY" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/mbaykal/~3/0KyWJwc-aNY/post.aspx</link>
      <author>medeni@muhammedbaykal.com</author>
      <comments>http://muhammedbaykal.com/post/handler-pagehandlerfactory-integrated-has-a-bad-module-managedpipelinehandler-in-its-module-list-error-fix.aspx#comment</comments>
      <guid isPermaLink="false">http://muhammedbaykal.com/post.aspx?id=b83b2851-02b9-4b70-8c4b-dfe2eac9da89</guid>
      <pubDate>Wed, 18 Aug 2010 02:20:00 +0200</pubDate>
      <category>ASP .Net</category>
      <category>IIS 7.5</category>
      <dc:publisher>mbaykal</dc:publisher>
      <pingback:server>http://muhammedbaykal.com/pingback.axd</pingback:server>
      <pingback:target>http://muhammedbaykal.com/post.aspx?id=b83b2851-02b9-4b70-8c4b-dfe2eac9da89</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://muhammedbaykal.com/trackback.axd?id=b83b2851-02b9-4b70-8c4b-dfe2eac9da89</trackback:ping>
      <wfw:comment>http://muhammedbaykal.com/post/handler-pagehandlerfactory-integrated-has-a-bad-module-managedpipelinehandler-in-its-module-list-error-fix.aspx#comment</wfw:comment>
      <wfw:commentRss>http://muhammedbaykal.com/syndication.axd?post=b83b2851-02b9-4b70-8c4b-dfe2eac9da89</wfw:commentRss>
    <feedburner:origLink>http://muhammedbaykal.com/post.aspx?id=b83b2851-02b9-4b70-8c4b-dfe2eac9da89</feedburner:origLink></item>
  </channel>
</rss>

