0

我用 WCF 服务构建了一个服务器:IService.cs 和 Service.cs。文件的代码如下:

服务.cs

[ServiceContract]
public interface ITaiKhoanNguoiChoi
{ 
    [OperationContract]
    void InsertStaff(string username);
 }

服务.cs

public void InserStaff(string username)
        {
            try
            {
                conn = new SqlConnection(strConnect);
                conn.Open();
                cmd = new SqlCommand("insert into STAFF values('" + username+ "')", conn);
                cmd.ExecuteNonQuery();
                conn.Close();
            }
            catch
            {

            }
        }

好的,这就是我构建的所有服务代码。然后,我将在我的客户端调用服务,代码如下所示:

ServiceClient proxy = new ServiceClient();
private void btnInsert_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
        {
            proxy.InsertStaffCompleted += new EventHandler<AsyncCompletedEventArgs>(InsertStaffMethod);
            proxy.InsertStaffAsync("John");            
        }

void InsertStaffMethod(object o, AsyncCompletedEventArgs e) 
        { 
            MessageBox.Show("YAY!");
        }

现在,在我第一次单击 btnInsert 时,“YAY”将显示 1 次。

第二次单击 btnInsert 时,“YAY”将显示 2 次。

……

在我第 N 次单击 btnInsert 时,“YAY”将显示 N 次。

那是我的问题。我不明白为什么我只点击1次,服务器的InsertStaff方法会被调用很多次。

你能为我解释一下吗?以及如何解决问题。我只希望 InsertStaff 方法仅在单击 btnInsert 1 次时执行。

4

1 回答 1

1

自从我使用 WebForms 事件生命周期以来已经有一段时间了,但我认为每次单击 btnInsert 时都会添加 EventHandler,因此每次都会触发越来越多的事件。

解决办法是不要线

proxy.InsertStaffCompleted += new EventHandler<AsyncCompletedEventArgs>(InsertStaffMethod);

在按钮单击处理程序中。

创建代理,然后在表单加载事件中添加一次事件处理程序。

顺便说一句,如果这将最终成为生产代码,请注意行中 SQL 注入的可能性:

cmd = new SqlCommand("insert into STAFF values('" + username+ "')", conn);
于 2013-04-02T08:48:57.503 回答