Forum

asp.net web service...
 
Bildirimler
Hepsini Temizle

asp.net web service problemi

4 Yazılar
2 Üyeler
0 Reactions
483 Görüntüleme
(@EbruBulgan)
Gönderiler: 12
Eminent Member
Konu başlatıcı
 

Arkadaşlar merhaba;

Yaşadığım problemi açıklayıcı bir şekilde nasıl yazacağım bilmiyorum ama umarım anlatabilirim. Neyse başlıyorum, başladım...

Bir register sayfam var. Kayıt esnasında aynı kaydın olup olmadığını click yapmadan, text' e veriyi girip tab la geçtikten sonra eğer o kayıt varsa uyarı vermesini istiyorum. Bunun içinde jquery kullandım. Web service oluşturup kodları yazdım, register.aspx te de bağladım. Ancak web service' i bulamıyor. Defalarca kontrol ettim ama sonuç aynı ve resmen tıkanmış durumdayım. :S Neden olabileceği, daha doğrusu bunu nasıl düzeltebileceğim ile ilgili fikirlerinizi bekliyorum.Şimdiden teşekkür ederim...

Kodlarıda vereyim ben.

web service

 [WebMethod]
        public int CheckUser(string username)
        {
            string constr = ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;

            string query = String.Format("select COUNT(*) from Users where Username='{0}'", username);
            SqlConnection baglan = new SqlConnection(constr);
            SqlCommand cmd = new SqlCommand(query, baglan);
            baglan.Open();
            int result = (int)cmd.ExecuteScalar();
            baglan.Close();
            return result;
        }

 Register.aspx:

<script src="jquery-1.6.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(function () {

        $("#Txtuname").change(CheckUser);

    });

    function CheckUser() {
        //alert("test");

        $.ajax({
            type: "POST",
            url: "WebService1/Service1.asmx/CheckUser",
            data: "{username: '" + $('#Txtuname').val() + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                $("#duplicate").empty();
                if (response.d != "0") {
                    $("#duplicate").html(' That user name has already been taken');
                }
            }
        });
    }
</script>

 

        İlgili alan;

               <tr>
                    <td>
                        <span class="label">Username:</span>
                    </td>
                    <td>
                        <asp:TextBox ID="Txtuname" runat="server"></asp:TextBox><span id="duplicate"></span>
                    </td>
                </tr>

 

 

 

 
Gönderildi : 06/07/2011 18:04

(@selahattinsadoglu)
Gönderiler: 826
Prominent Member
 

Merhaba Ebru,

 Eğer  kullanmış olduğun web servis aplikasyonun kök dizininde bulunuyorsa o zaman  /WebService1/Service1.asmx/CheckUser kullanmalısın.

Bununla birlikte, bize projenin dosya-sistemi alt yapısını bize göstermen gerekiyor.

İpucu: Geçerli olan web servisinin path'ini her zaman kopyala, method ismini kaldır ve URL 'in sonuna onu ekle.Eğer bulunursa o zaman herşey tamamdır.Örneğin, aşağıdaki  adımları takip edebilirsin.
1- web servisinin path'ini önce bir yere not al: /WebService1/Service1.asmx/CheckUser
2- Buradan method adını kaldır: /WebService1/Service1.asmx

3- Eğer / ile başlıyorsa ,basit şekilde sitenin sonuna bunu ekle:   http://www.site.com/WebService1/Service1.asmx bununla birlikte geçerli olan URL path'ine onu ekle: http://www.site.com/pageName.aspx/WebService1/Service1.asmx gibi.

Eğer çözümle oluyorsa her şey tamamdır.  

 

Saygılar,

 
Gönderildi : 06/07/2011 20:30

(@EbruBulgan)
Gönderiler: 12
Eminent Member
Konu başlatıcı
 

Problemi çözdüm.

Teşekkür ederim. =)

 
Gönderildi : 07/07/2011 00:01

(@selahattinsadoglu)
Gönderiler: 826
Prominent Member
 

Sorunu çözdüğüne sevindim.Tam olarak nasıl çözdüğünü yazarsan aynı sorunu yaşayanlar için yardımcı olacaktır.

İkinci olarak , kodun içerisinde kullandığın ;

 

string query = String.Format("select COUNT(*) from Users where Username='{0}'", username);

Burada herhangi biri javascript çağırması ile sisteme girebilir.Bunun için "bob' GO; DROP TABLE Users GO; --"  gibi olmalıdır.

Yani her zaman bu tür sorguları parametrize edilmiş olarak kullan ... yani;

SqlCommand countUsersCommand = new SqlCommand("select COUNT(*) from Users where Username='@UserName';");
countUsersCommand.Parameters.Add("@UserName", username);

 Ayrıca ;

Kullandığın jquery test için ;

$.ajax({
type: "POST",
url: "WebService1/Service1.asmx/CheckUser",
data: "{username: '" + $('#Txtuname').val() + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
failure: function(response){alert(response);},
success: function (response) {
$("#duplicate").empty();
if (response.d != "0") {
$("#duplicate").html(' That user name has already been taken');
}
}
});

burada "fiddler" kullanmalısın.Ve ne değer döndürdüğüne bakmalısın.

 

Saygılar,

 

 
Gönderildi : 07/07/2011 11:45

Paylaş: