只是把我的头围绕在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测试客户端:
干杯, 尼克
答案 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服务调用重复这种模式,它使它们非常有条理以及可单元测试。