WCF:两次提交服务

时间:2012-04-07 04:08:03

标签: wpf wcf double-submit-problem

只是把我的头围绕在WCF上,所以请原谅我不优雅的编码。 我遇到的问题是我似乎要向我的服务提交两次数据(见截图),即使(我想想)我只做了一次。 有人可以让我知道我可能做错了什么吗?如果我做得不好,甚至只是建议一个更好的方法。

代码如下:

public void EndOfLevel()
    {
        GlobalVariable.TotalQuestionsAsked = 10;
        GlobalVariable.CorrectDecimal = GlobalVariable.Correct / GlobalVariable.TotalQuestionsAsked;

        //Show loading screen
        UploadingScreen.Visibility = Visibility.Visible;
        //Submit this levels results.

        Service1Client client = null;
        client = new Service1Client();

            //Gather the results and details
            Result thislevel = new Result();
            thislevel.Datetime = DateTime.Now;
            thislevel.result = GlobalVariable.CorrectDecimal;
            thislevel.TimesTable = GlobalVariable.NeedsHelpWith;

            //submit them
            try
            {
                client.SubmitResultAsync(thislevel);
            }
            catch
            {
                MessageBox.Show("Error uploading data");
            }
            finally
            {
                client.Close();
                Results r3 = new Results();
                this.NavigationService.Navigate(r3);
            }



    }

WCF测试客户端:

Screenshot of the results

干杯, 尼克

1 个答案:

答案 0 :(得分:1)

如果可以的话,这是一个用于管理我们的WPF应用程序和WCF服务之间的异步调用的模式。

在本节中,我们有一个服务客户端的公共访问者,可以确保在调用服务方法之前打开与客户端的连接:

public static MyServiceClient Client
{
    get
    {
        return GetMyServiceClient();
    }
}
private static MyServiceClient client;

private static MyService.MyServiceClient GetMyServiceClient()
{
    VerifyClientConnection();

    return client;
}

private static void VerifyClientConnection()
{
    if (client == null || client.State == System.ServiceModel.CommunicationState.Closed)
    {
        client = new MyService.MyServiceClient();
    }
}

在本节中是我们的异步调用和回调模式的一个示例(此示例显示了我们用于将异常数据传递给我们的服务的委托和回调):

public delegate void LogExceptionCompletedEvent();
public static LogExceptionCompletedEvent LogExceptionCompleted;

public static void LogExceptionAsync(SilverlightException exception)
{
    string json = JsonConvert.SerializeObject(exception);

    Client.LogExceptionCompleted -= client_LogExceptionCompleted;
    Client.LogExceptionCompleted += client_LogExceptionCompleted;
    Client.LogExceptionAsync(json);
}

private static void client_LogExceptionCompleted(object sender, AsyncCompletedEventArgs e)
{
    if (LogExceptionCompleted != null)
    {
        LogExceptionCompleted();
    }
}

在此示例中,视图模型可以将事件处理程序附加到LogExceptionCompleted委托,然后在从服务返回时接收回调的结果。

我们基本上为我们需要从我们的应用程序进行的异步WCF服务调用重复这种模式,它使它们非常有条理以及可单元测试。