Microsoft Sync Framework Newbie - Исключение аргумента не обработано - PullRequest
1 голос
/ 24 марта 2012

Я очень новичок в разработке для Windows Mobile и MSFT Sync Framework в качестве главы.У меня есть простое приложение, которое читает штрих-код, извлекает запись из базы данных и позволяет пользователю вводить новое чтение.Это все работает просто отлично.Однако, когда я пытаюсь выполнить синхронизацию, я получаю следующее исключение:

System.ArgumentException was unhandled
  Message="ArgumentException"
  StackTrace:
       at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean verifyAccess, StackCrawlMark& stackMark)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
       at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
       at Microsoft.Synchronization.Data.ServerSyncProviderProxy.ApplyChanges(SyncGroupMetadata groupMetadata, DataSet dataSet, SyncSession syncSession)
       at Microsoft.Synchronization.SyncAgent.UploadChanges(SyncGroupMetadata groupMetadata)
       at Microsoft.Synchronization.SyncAgent.Synchronize()
       at ElectricBarcodeApp.Form1.buttonSync_Click(Object sender, EventArgs e)
       at System.Windows.Forms.Control.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnClick(EventArgs e)
       at System.Windows.Forms.ButtonBase.WnProc(WM wm, Int32 wParam, Int32 lParam)
       at System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)
       at Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain)
       at System.Windows.Forms.Application.Run(Form fm)
       at ElectricBarcodeApp.Program.Main()

Вот мой код:

using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlServerCe;
using System.IO;
using System.Reflection;

namespace ElectricBarcodeApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void buttonStart_Click(object sender, EventArgs e)
        {
            using (SqlCeConnection conn = new SqlCeConnection(
            ("Data Source=" + (Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase), "ElectricReading.sdf") + ";Max Database Size=2047"))))
            {

                // Connect to the local database 
                conn.Open();
                using (SqlCeCommand cmd = conn.CreateCommand())
                {
                    SqlCeParameter param = new SqlCeParameter();
                    param.ParameterName = "@Barcode";
                    param.DbType = DbType.String;
                    param.Value = textBarcode.Text.Trim();

                    // SELECT rows
                    cmd.CommandText = "SELECT Location, Reading FROM Main2 WHERE Barcode LIKE @Barcode";
                    cmd.Parameters.Add(param);

                    DataTable data = new DataTable();

                    using (SqlCeDataReader reader = cmd.ExecuteReader())
                    {

                            data.Load(reader);
                            this.dataGrid1.DataSource = data;

                    }

                }
            }


        }

        private void buttonEnter_Click(object sender, EventArgs e)
        {
            using (SqlCeConnection conn = new SqlCeConnection(
            ("Data Source=" + (Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase), "ElectricReading.sdf") + ";Max Database Size=2047"))))
            {

                // Connect to the local database 
                conn.Open();
                using (SqlCeCommand cmd = conn.CreateCommand())
                {

                    // INSERT NEW READING
                    cmd.CommandText = "UPDATE Main2 SET Reading = '" + textNewReading.Text.Trim() + "' WHERE Barcode LIKE '" + textBarcode.Text.Trim() + "'"; 

                    int m = cmd.ExecuteNonQuery();
                    cmd.ExecuteNonQuery();
                    if (m > 0)
                    {
                        MessageBox.Show("New Reading Successfully Entered:" + textNewReading.Text.Trim(), "Confirmation", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
                    }

                }
            }

        }

        private void buttonSync_Click(object sender, EventArgs e)
        {
            // The WCF Service
            ElectricReadingCacheWebRef.ElectricReadingCacheSyncService webSvcProxy = new
                ElectricBarcodeApp.ElectricReadingCacheWebRef.ElectricReadingCacheSyncService();

            // The Remote Server Provider Proxy
            Microsoft.Synchronization.Data.ServerSyncProviderProxy serverProvider = new
                Microsoft.Synchronization.Data.ServerSyncProviderProxy(webSvcProxy);

            // The Sync Agent
            ElectricReadingCacheSyncAgent syncAgent = new ElectricReadingCacheSyncAgent();
            syncAgent.RemoteProvider = serverProvider;
            //Main2 is the table to be synchronized
            syncAgent.Main2.SyncDirection = Microsoft.Synchronization.Data.SyncDirection.Bidirectional;

            // Synchronize the databases
            Microsoft.Synchronization.Data.SyncStatistics stats = syncAgent.Synchronize();

            // Show synchronization statistics
            MessageBox.Show("Changes Downloaded: " + stats.TotalChangesDownloaded.ToString() +
                "\r\n" + "Changes Uploaded: " + stats.TotalChangesUploaded.ToString());

        }



    }
}

В этой строке выдается исключение:

// Synchronize the databases
                Microsoft.Synchronization.Data.SyncStatistics stats = syncAgent.Synchronize();

Я ничего не нашел в поиске решения, и любая помощь очень ценится!

РЕДАКТИРОВАТЬ: Я думал, что это может быть, потому что у меня не было:

using Microsoft.Synchronization;
using Microsoft.Synchronization.Data;

Но добавив, чтоне изменилось исключение.

1 Ответ

1 голос
/ 26 марта 2012

Дважды щелкните веб-ссылку, чтобы открыть ее в Обозревателе объектов.

Разверните узел YourAppName.YourAppNameCacheWebRef.

Щелкните правой кнопкой мыши YourNameCacheSyncService и выберите Перейти к определению.

Reference.cs открывается в редакторе кода.

Добавьте следующий код после последнего оператора использования или импорта:

Imports Microsoft.Synchronization
Imports Microsoft.Synchronization.Data

Или в C #:

using Microsoft.Synchronization;
using Microsoft.Synchronization.Data;

Удалить все классы и перечисления в файле, кроме YourNameCacheSyncService.

...