Forum
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>
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,
Problemi çözdüm.
Teşekkür ederim. =)
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,