0

私は webServices を使用してシリアル化されたオブジェクトの実装で作業してきました。データは、webservices で次の操作を実行するデスクトップ アプリケーションによって消費され、正常に動作します。

        [WebMethod]
        public byte[] getPartners()
        {
            string[] strFiles = Directory.GetFiles(GlobalStatic.rootAppData + @"\partners");

            List<DentalSock.main.partner> _partners = new List<DentalSock.main.partner>();
            foreach (String str in strFiles)
            {
                DentalSock.main.partner ptn = new DentalSock.main.partner();
                ptn.readPartner(str.Replace(GlobalStatic.rootAppData + @"\partners\", "").Replace(".xml", ""));
                _partners.Add(ptn);
            }

            BinaryFormatter bf = new BinaryFormatter();
            MemoryStream ms = new MemoryStream();
            bf.Serialize(ms, _partners);
            return ms.ToArray();                  
        }

次に、クライアント コンシューマーに戻ったら、次のコードを使用して Web サービスを呼び出し、オブジェクトを一般的なリストに逆シリアル化します。

        ServiceReference1.partnerSoapClient p = new ServiceReference1.partnerSoapClient();
        byte[] byteArray = p.getPartners();
        MemoryStream stream = new MemoryStream(byteArray, 0, byteArray.Length);
        stream.Write(byteArray, 0, byteArray.Length);

        BinaryFormatter bf = new BinaryFormatter();

        pList = (List<partner>)bf.Deserialize(stream);

すべてが正常に動作しているように見えますが、最後の行で Deserialize メソッドが呼び出されても何も起こらず、例外はありません。デバッガーを試してみると、黄色で強調表示された行が上記のコードの最後の行に到達すると、デバッガー モードに入ります。単に停止し、 Windows フォームを表示します。わからないので教えてください!

4

1 に答える 1

0

コードは非常にクールに機能しています。すべてのコードをバックグラウンドワーカーの DoWork イベントの下に配置し、フォームの Load イベントで RunWorkerAsync() メソッドを呼び出すと、すべてがうまく機能し始めました。メインスレッドへ。

于 2013-04-29T17:35:52.767 に答える