调用WCF服务时出错

时间:2013-04-02 08:31:33

标签: wcf windows-phone-7

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

Iservice.cs

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

Service.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
            {

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

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次。

这是我的问题。我不明白为什么我只点击一次,服务器上的InsertStaff方法将被多次调用。

你可以向我解释一下吗?以及如何解决问题。我只希望InsertStaff方法只在我点击btnInsert 1次时才执行。

1 个答案:

答案 0 :(得分:1)

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

解决方案是没有行

proxy.InsertStaffCompleted += new EventHandler<AsyncCompletedEventArgs>(InsertStaffMethod);
按钮单击处理程序中的

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

顺便说一下,如果这最终会因为生产代码要注意SQL注入的可能性:

cmd = new SqlCommand("insert into STAFF values('" + username+ "')", conn);