Web Deploy hatası \ (503) Server Unavailable

Önceki yazılardan olan Web deployment konusundan sonra sıkça mail aldığım ve sıkça karşılaşılan bir hata olan;

 

The response header ‘MSDeploy.Response’ was ” but ‘v1′ was expected.The remote server returned an error: (503) Server Unavailable

 

hatasına kısaca açıklık getirmek istiyorum. Bu hatanın sebebi deployment servisinin bir şekilde durması ve bu nedenle gelen publish isteklerini cevaplamamasıdır.

Çözümüyse command prompt ekranında;

-net start msdepsvc

komutuyla servisi calıştırmaktır.

 

image_thumb_55860458

Categories: Uncategorized

Visual Studio 2010, Web Deploy Konfigurasyonları

Profil bazlı web deployment imkanı Visual Studio 2010 un en büyük getirilerinden. Bu aşamayı kullanabilmek için IIS kurulu web sunucunuzun yapılandırmasına bağlı olarak izlemeniz gereken birkaç farklı senaryo mevcut.

Bu senaryoları tüm detaylarıyla anlatan bağlantıları paylaşalım;

 

Automating Deployment with Microsoft Web Deploy

This is the twenty-eighth in a series of blog posts I’m doing on the VS 2010 and .NET 4 release.

This blog post continues a series of posts I’m doing that cover the new improvements we made around web deployment.  In my first post in the deployment series I provided an overview of the new VS 2010 Web Deployment features.

http://weblogs.asp.net/scottgu/archive/2010/09/13/automating-deployment-with-microsoft-web-deploy.aspx

Configuring Remote Administration and Feature Delegation in IIS 7

IIS 7 (IIS 7.0 on Windows Server® 2008 or IIS 7.5 on Windows Server 2008 R2) provides administrators and developers with a new configuration system that is accessible, extensible and distributable. The new XML-based format allows for easy configuration of the modules and features available in IIS 7. It also enables granular control of the locations at which settings for individual features can be configured (for example, at the server level in the applicationHost.config file, or at a site or an application level in a Web.config file).

http://learn.iis.net/page.aspx/159/configuring-remote-administration-and-feature-delegation-in-iis-7/

Configure the Web Deployment Handler

This guide provides a basic overview of the steps to configure the Web Deployment handler on your hosted server and test that a user can deploy applications to a Web site. This setup will be using the information in this document to install the Web Deployment Tool onto a new server and configure recommended settings.

http://learn.iis.net/page.aspx/516/configure-the-web-deployment-handler/

Crm 2011 Early Bound Programlama Hatası – Unable to cast object of type ‘Microsoft.Xrm.Sdk.Entity’

April 26, 2011 2 comments

Crm 2011 sdksının sunduğu programla yapılarından biri Early Bound olarak adlandırılmakta ve CrmSvcUtil aracını kullanarak Organizasyonun obje olarak bir çıktısının alınması temeline dayanmaktadır.

Bu biçimde bir kullanım esnasında çıktısını aldığınız organizasyon varlıkları (Entity) üzerinde benim örneğimde olacağı üzere linq sorgularında cast hatası almanız olası ve çözülmesi çok basit, basit olduğu kadar da ince bir detayda gizli. Nedir bu detay ;

                ClientCredentials c = new ClientCredentials();
                c.Windows.ClientCredential = new System.Net.NetworkCredential(userName, userPassword, userDomain);

                OrganizationServiceProxy proxy = new OrganizationServiceProxy(new Uri(organizationUri), null, c, null);
                proxy.EnableProxyTypes();

                //create organization service with layer of proxy
                this._service = (IOrganizationService)proxy;

kalın harflerle işaretlediğim üzere OrganizationServiceProxy nesnesinden türettiğimiz proxy objesinin EnableProxyTypes() konfigürasyonunu yapmak belirtilen hatadan kurtulmamız için yeterli.

Mevzu bahis hataları tam olarak hatırlarsak;

        Object of type Microsoft.Xrm.Sdk.Entity cannot be converted to type Xrm.abdf Message = Unable to cast object of type ‘Microsoft.Xrm.Sdk.Entity’ to type Xrm.abdf

Asp.Net Web Formları arasında alternatif veri taşıma yöntemi

October 18, 2010 Leave a comment

İki web formu arasında veri taşımak kullanılan yöntemler açısından genelde kararsız kalınan ve kolaya kaçmakla birlikte güvenlik açıklarına sebebiyet veren konuların başında gelir.

Klasik olarak kullanılan yöntem html form dahilinde oluşturulmuş formlarla post etmek ve diğer formda bu değerleri karşılamak. Ya da yazılacak özel bir sınıfa formdan gelen değerleri yazdırıp bir eventle kendi sayfasında ya da bilgilerin gönderileceği ikinci bir formda karşılayarak okumak ve yorumlamaktır.

Bu klasik kullanımlara ek olarak farklı bir methodu kısaca anlatmaya çalışacağım.

Öncelikli olarak System.Web.UI.Page dan türeyen kendimize has bir web.ui sınıfı olşuturalım ve oluşturacağımız web formları bu sınıftan türetelim. Oluşturduğumuz bu sınıfa PostValues adı altında bir Dictionary tipinde özellik ekledim. Eklediğim bu özelliği formlar arasında veri taşırken kullanacağım. Peki bu nasıl olacak ? İnceleyelim;

yaz bunu mustafa alkan

Veri girişi yapılacak formu mainform, veri gönderilecek formu da subform olarak kabul edersek, SubForm.aspx dosyamın içine;

yaz bunu mustafa alkan

şeklinde bir tanım yapıyorum. Bu tanımla birlikte hangi formdan hangi sayfadan gelecek verileri kabul edeceğimi tanımlamış oluyorum. Tanımladığım bu yapı sayesinde kod tarafında şöyle bir erişime sahip oluyorum;

Dictionary<string, string> postValues = PreviousPage.PostValues;

Tanımlamış olduğum özelliğe direk erişim sağlamış oluyorum.

Bu özelliği ana formda istediğim güvenlik önlemlerini alarak istediğim validasyonları kullanarak doldurabilir daha sonra da ikinci formda kontrol edebilirim. Peki bu post değerlerini hangi aşamada dolduracağım ? Bunun için önerebileceğim en doğru yer buton un Click eventidir.

image

Categories: asp.net, c#.net Tags: ,

Asp.Net MVC 2 –9- Test süreçleri, Unit Testing

September 21, 2010 Leave a comment

Test işlemleri daha önce profile serimizde ele aldığımız üzere genelde ertelenen bir aşamadır. Ancak güncellenen yazılım teknikleriyle birlikte test süreçleri daha kolay hale getirilmekte, test için geliştirilmiş araçlar ya da sihirbazlar aracılığıyla ek efor gerektirmeden dahil edilebilmektedir. Bu gelişmeler ertelenen test süreçlerini daha önemli ve vazgeçilmez hale getirmiştir. Test süreçlerinin kazandığı önem ve kolaylık boyutundan, belli bir senaryo dahilinde test edilmesi hayli zor olan Asp.Net te Mvc yapılanmasına uyum gösterek etkilenmiştir.

Yeni bir mvc projesi oluşturduğunuzda unit test seçeneğini de birlikte sunmakta ve iki proje şeklinde yeni solution açılmaktadır. Ancak başlangıçta bu seçeneği seçmeyip sonradan eklemek isterseniz izlemeniz gereken yol; add new project\yeni proje ekle diyerek test tipinde bir projeyi solution’a eklemektir. Eklediğimiz unit test projesinin esas projemizle paralel ve anlaşılır durumda olması için test sınıflarını ekleyeceğimiz klasörleri de aynı adlarla vermek doğru olacaktır. Klasör içine ekleyeceğimiz test sınıf adlarınını sonunaysa test eklemek referanslar arasındaki karışıklığı giderecek bir adaım olacaktır. Test sınıfları da ana proje sınıfları da aynı adda olması durumunda solution anlaşılırlığını yitirecektir.

mustafa alkan yaz bunu mustafa alkan yaz bunu 

 

mustafa alkan yaz bunu mustafa alkan yaz bunu

Klasör yapılarını kurduktan sonra Models klasörüne sağ tıklarak new test diyalog penceresiyle birlikte yeni bir unit test sınıfı ekliyoruz. Test sınıfı ekledikten sonra test sınıfımız otomatik olarak açılacak ve ekranda [TestClass], [TestMethod] gibi attributlere sahip kısımlar göreceğiz. TestClass test aşamalarını yer alacağı metodların yani TestMethod özelliğindeki metodların yer alacağı ve aşama aşama kontrollerin yapılacağı kısımlardır. Buradaki aşamalar geliştiricinin ya da analistini çizdiği senaryoya göre farklı şekilde tasarlanabilir. Test senaryomda ilk önce boş girişler yapılarak yeni bir kayıt oluşturmayı daha sonraysa string değerlere integer değerler, integer değerlere de string değerler vererek sonuçlarını gözlemleyeceğim.

mustafa alkan yaz bunu mustafa alkan yaz bunu

Öncelikle yeni bir kullanıcı sınıfı oluşturarak belirlediğim senaryoya göre bu sınıfa değerler atıyorum. Atadağım değerler sonrasında modelin IsValid propertysini test methodunun içinde sınmaya yapacak olan Assert.IsFalse fonksiyonuna gönderiyorum. Bu fonksiyon test aşamalarını senaryo dahilindeki sıraya göre çalıştırıp sonuçlarını ekrana yazacaktır. Test methodlarını oluşturduktan sonra CTRL R, A kısayoluyla ya da test->run->All test projects i seçerek test sürecimizi başlatıyoruz.

mustafa alkan yaz bunu mustafa alkan yaz bunu

Test süreci başladığında göreceğiniz üzere tüm test aşamaları ekranda verdiğimiz method isimleriyle listelenecek ve sonuçları yazılacaktır. Küçük ölçekli projelerde sorun olmasa da büyük ölçekli projelerde hata veren aşamaya daha rahat ulaşım için method isimlerini anlaşılır vermek doğru bir adım olacaktır.

mustafa alkan yaz bunu mustafa alkan yaz bunu mustafa alkan yaz bunu

Controller sınıfımız için kurgulanan senaryoda ActionResult olarak dönen bir sonucu ViewResult olarak göstermeye çalışmayı ve ayrıca sisteme olmayan bir id ye ait kaydı göstermeyi denemek istiyorum. Bunun iiçin gerekli test methodunu yazara sonuçları gözlemlediğimde Failed hatasıyla birlikte aşamayı geçemedğimi test sonuçlarından görebiliyorum.

Asp.Net MVC 2 –8- Güvenlik kontrolleri \ Authorizing, Role Management

Genel Asp.net uygulamalarında olduğu gibi Asp.NET MVC Frameworkünde de üzerinde önemle durulan konulardan biridir güvenlik unsurları. Şu ana kadar yazdığım makaleler ve örneklerde herhangi bir kimlik doğrulama ve rol kısıtlaması olmaksızın her aksiyona izin vermiştik. Şimdi Asp.NET MVC Frameworkünün nin imkan verdiği doğrultuda güvenlik kısıtlaması ve kontrolü konularını açıklamaya çalışacağım.

Controller katmanları içerisinde yer alan yeni kayıt ekleme ve düzeltme işlemlerini başlangıç için seçebiliriz. Örneklerde de görüleceği üzere mvc yapısı itibariyle bu işlemlerin ayrı katmanda yer almasının ne kadar fonksiyonel olduğunu anlayacağız. Sadece üye olanların bir formu görüntelemesine izin verme kısıtlamasını, ilgili fonksiyonun başına Authorize parametresini ekleyerek sağlayabilmek mümkün. Öte yandan yeni bir kayıt oluşturma aşamasındaki işlevselliğiyse Post tanımlamasının yanında yine Authorize parametresini vererek kolay bir şekilde sağlamak mümkün. Ayrıca sayılan bu iki işlemi de genel üyeliğe zorunlu hale getirdiğimiz gibi kullanıcı bazında kısıtlama yapmakta mümkün. Authorize tanımlamasına kullanıcı adlarını göndererek (Örn: Admin) sözkonusu işlemi sadece belirtilen kullanıcının gerçekleştirmesine izin verebiliriz. Kullanıcı bazında olduğu gibi mevzubahis kısıtlamayı Rol bazında da yaparak tüm bir departmana iş kolundaki çalışanlara yetki tanımı yapılabilir.  (Tüm bu açıklamalara ait ekran görüntüleri aşağıda takip edilebilir)

mustafa alkan yazbunu.wordpress.com mustafa alkan yazbunu.wordpress.com

mustafa alkan yazbunu.wordpress.com mustafa alkan yazbunu.wordpress.com

mustafa alkan yazbunu.wordpress.com

Kullanıcı bazındaki kısıtlamalarda özellikle de sözkonusu kısıtlama, kaydın detayını görmek ve güncellemekse bazı sıkıntıları beraberinde getirebilir. En basit olarak kendi eklediğim bir kaydın detayını kullanıcı adım Users listesinde olmadığı için görüp üzerinde değişiklik yapamayabilirim. Peki bu sıkıntıyı nasıl aşabiliriz.

mustafa alkan yazbunu.wordpress.com Öncelikle kısa bir bilgi vermek gerekirse oluşturduğumuz mvc projesinde kullanıcı kaydı oluşturma saklama ve login işlemleri AccountController olarak Asp.Net in MemberShip apisi züerinden oluşturulmuş bir şekilde gelmektedir. Bu yapı yardımıyla yeni bir kullanıcı açabilir açtığımız kullanıcıyla sisteme giriş yapabiliriz. Generate olan bu database yapısını ve kayıtları görmek için tüm dosyaları göster seçeneğini işaretlediğimiz takdirde App_Data klasörü altında görebiliriz. Peki bu önbilgiyi neden verdik. Sisteme giriş yaptığımızda Asp.Net apisinin sağladığı User.Identity.Name şeklinde giriş yapan kullanıcı bilgisini okuyabilir ve mevcut kullanı kimliğine ulaşabiliriz.

mustafa alkan yazbunu.wordpress.com

mustafa alkan yazbunu.wordpress.com

mustafa alkan yazbunu.wordpress.com

Böylelikle kurguladığımız bu yapıda, ulaştığımız bu kimlik bilgilerini yeni kayıt girerken kaydettiğimiz takdirde düzenleme ve görüntüleme isteklerinde, isteği yapan kullanıcıyla aynıysa izin ver şeklinde bir yapı kurabiliriz. Böylelikle kod tarafında kullanıcı listesi saklamak yerine daha güvenli ve kontrollü bir güvenlik kısıtlama yapısı kurgulayabiliriz.

Asp.Net MVC 2 –7- Özelleştirilmiş Sayfalandırma\Custom Paging

Mvcye kolayca ekleyebileceğimiz özellikleri anlatmaya devam ediyoruz. Mvc olduğu kadar Linq yapısının da avantajıyla IQueryable interface yapısıyla viewlari bölümlendirebilir sayfalandırma\paging yapabilirsiniz.

Öncelikle bugün kullanıcıları listelemek için bir fonksiyon ekledik. Bu fonksiyonumuz dönüş tipini kayıtlar içerisinde sıralama ve atlama yapabilmek için IQuerayable olarak belirledik. Kurguladığımız bu yapı itibariyle Skip() ve Take() adlarındaki iki fonksiyona dikkat etmiş olabilirsiniz. Bu iki fonksiyon neticesinde IQueryable yapısı paraleleindeki sayfalandırmayı yapımıza uyarlıyoruz. Skip() baştan itibaren es geçilmesi gereken kayıt sayısını, Take() ise bu noktadan itibaren kaç kayıt alacağımızı belirtmemiz için kullanılan fonksiyonlardır. Kullanıcı sayısı 10 dan fazla olması durumunda sonraki sayfalara dallanma işlemi gerçekleşecektir. Bu yapıyı kurgulayarak gerekli düzenlemeyi Controller nesnemizin içindeki Index() aşamasına yerşetiriyoruz. Bu özelliği ana sayfa düşündüğümüz için böyle bir düzenleme yaptık ama ayrı bir view ve farklı bir sayfada gösterilmek istenirse o şekilde de yapılandırma sağlanabilir.

image image

Eklediğimiz bu özelliğin bir de view tarafına yansıtılması gereken link kısmı var. Bu tarz bir yapı generic olduğu ve birden fazla nesne için kullanılabileceğini varsayarsak mevcut model yapısın ayrı olarak <T> type ıyla tüm nesneler için kullanılabilecek bir yapı hazırlıyoruz. Bu yapıda toplam sayfa sayısını, tıklanan indekse göre önceki sayfa ya da sonraki sayfa var mı kontrolünü yapmayı hedefliyoruz.

public class PagedObject<T> : List<T>
    {
        public int Index { get; set; }
        public int Size { get; set; }
        public int Count { get; set; }
        public int TotalPage { get; set; }

        public PagedObject(IQueryable<T> source, int currentPage, int pageSize)
        {
            Index = currentPage;
            Size = pageSize;
            Count = source.Count();
            TotalPage = Count / Size;

            this.AddRange(source.Skip(Index * Size).Take(Size));
        }

        public bool HasPrePage
        {
            get
            {
                return (Size > 0);
            }
        }

        public bool HasNextPage
        {
            get
            {
                return (Index+1 < TotalPage);
            }
        }
    }

PagedObject şeklinde ayrı bir sınıf yapısıyla tasarladığımız bu yapıda dört ayrı özellik\property mevcut.

Index; şu anda bulunduğumuz sayfayı
Size; bir sayfada gösterilecek kayıt sayısını,
Count; toplam kayıt sayısını,
TotalPage; toplam sayfa sayısını

göstermektedir.

image image

<T> türünden tanımladığımız bu sınıf yapısı neticesinde istediğimiz kayıt için kullanabilecek durumdadır. Obje oluşturulurken Constract fonksiyonu için elimizdeki sonuç setini, bulunduğu sayfayı ve bir sayfada gösterilecek olan kayıt sayısını göndermek yeterli olacaktır. Ayrıca HasPrePage ve HasNextPage özellikleri sayesinde kullanıcı ekranlarında bir sonraki ya da bir önceki kayıt olup olmaması durumuna göre linklerle ilgili aktive\deaktive edebilme işlemlerini sağlayabileceğiz.

imagePageObject model yapısını kullanabimek için view içerisinde bu yöndeki değişikliği yaparak özelleştirilmiş assemblymizin adresini belirtmemiz kullanım için yeterli olacaktır.

Dynamics Crm Web Servis Soap Hatası ve Çözüm Önerisi

image Dynamics Crm tabanlı bir web uygulamasında karşılaştığım ilginç bir web servis hatası ve çözümünü paylaşmak istiyorum.

Projemiz Dynamics Crm üzerinden yetki kontrollerini yapan bağımsız bir web uygulamasıdır.

Projeye Crm web servisi dahil edilirken, http://1.1.1.1/MSCRMServices/2007/CrmServiceWsdl.aspx?uniquename=organizasyonismi

şeklinde adres verilmiş ve hata alinmadan servis dahilindeki siniflara,fonksiyonlara ulaşarak web reference olarak eklenebilmiştir.

Aynı adrese browserdan erişim yapıldığında sorunsuz olarak servis yapısına yine ulaşılabilmektedir.

Ancak proje dahilinde request\response aşamasına gelindiğinde bu adrese login olunamamakta, AuthenticationTokenValue null olarak dönmekte ve;

Possible SOAP version mismatch: Envelope namespace http://schemas.xmlsoap.org/wsdl/ was unexpected. Expecting http://schemas.xmlsoap.org/soap/envelope/.

Hatası vermekteydi.

Mevcut hatanın çözümü http://1.1.1.1/MSCrmServices/2007/CrmService.asmx şeklinde adres tanımının doğru bir şekilde yapılmasıyla aşılabilmektedir.

Blog yazımında türkçe ve html karakter problemi

Blog yayınlama esnasında wordpress altyapısını kullanarak yazı yayınlarken karşılaştığım özel karakter sorunuyla ilgili çözümü paylaşmak istiyorum.

Özel karakter diyorum çünkü problem sadece türkçe karakter problemi değiş; < > gibi karakterlerinde değiştirilerek post edilmesi nedeniyle wordpress admini haricinde hiçbir uygulamadan yazı giremiyorsunuz bu sorun nedeniyle.

Not well formatted hatası olarak alacağınız;türkçe ve html karakterlerin değişimine sebep olan bu problemi

http://wordpress.org/support/topic/402653 adresindeki çözüm önerisiyle giderebilirsiniz.

Categories: Uncategorized Tags: ,

Asp.Net MVC 2 –6- Dry ve Partial View yapısı

Model View Controller serimizde geldiğimiz aşama itibariyle form ve beraberindeki sınıf yapılarına müdahele edebilir durumdayız. Kurguladığımız database yapısı paralelinde business\iş modelimize göre form ve sınıf yapılarını özelliştirme aşamalarına birkaç ek yöntemle devam edeceğiz.

Mvc nin önemli prensiplerinden biri kendini tekrar etme\Dont repeat yourself kısacası DRY olarak adlandırılan prensibe göz atacağız öncelikle. Serimizde kullandığımız User yapısından yola çıkarak örneklersek eğer dikkatinizi çekeceği üzere Create ve Edit formları birbirinin aynı kod bloklarını içermektedir. Daha sonra yapmış olduğumuz kullanıcı departman düzeltmesini Create için yaptığımızda edit için unutabiliriz, unutmasak bile ayrı ayrı aynı kodları yazmak suretiyle kod kirliliğine yol açmış ve proje boyutlarını arttırmış olacağız. Hem de mvcnin prensibi olan Dry i tamamen reddetmiş olacağız. Nasıl bir yol izlemeliyiz bu durumda? inceleyelim.

yaz bunu asp.net mvc image

Yeni ana form yapımızı oluşturacağımız View\User klasörüne sağ tıklayarak Add->View seçeneklerini takip ederek işlemi view ekleme penceresine ulaşıyoruz. Bu pencerede dikkat etmemiz gereken Create Partial View ve Create strongly typed view seçeneklerinin işaretli olmasıdır. Typed view seçeneğiyle mevcut Controller sınıflardan seçimimizi yapmış, partial view seçeneğiyle de yapılandırılmış ola view yapısını eklediğimiz View a göndermiş oluyoruz.

image

Bu işlemi yaptıktan sonra Create ya da Edit formunun tekrarlanan kısmını alarak UserBase yapımızın gövdesini oluşturuyoruz.

image image

Bu aşamayla ana form yapısını oluşturduktan sonra Create ve Edit form aşamalarını Html.RenderPartial fonksiyonuyla ana formu çağıracak şekilde düzenliyoruz.

image

Çalıştırdığımızda göreceğimiz üzere sonuç aynı. Daha az uğraşı daha az kod kalabalığı her zaman daha rahat problem çözümü demek.

Partial viewlara ek not olarak Site.Master yapısını kullanmak ve tekrar edilen kodlardan uzak durmak başvurulacak ek bir yöntemdir.

Follow

Get every new post delivered to your Inbox.