xml - Delphi 7 与 XML 通信

标签 xml delphi asmx

我在 Delphi 方面有一些(5 年)经验(在 pascal 方面有 30 年),但在 WEB 编程方面却没有那么多经验。我已成功地将 FTP(文件传输)和 SMTP(邮件)支持安装到我的一些程序中。我还使用了 HTTP (Get),然后解析了一些字符串,也成功了。但是,就是这样!

现在我必须连接到 https(安全)url 并使用 ASMX 服务发送和接收 XML 文件。文件没问题,已经测试过。

但是..我几乎不知道如何与 Delphi 7 实现这种连接。我怀疑 SOAP(简单对象访问协议(protocol)),并且怀疑 ionic 是从下面的示例中引发的,它在其中创建没有任何视觉类的“凭空”对象,但我不确定!

书面示例是用 C# 编写的:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Serialization;
using System.IO;


namespace SendaStgrXML
{
    public partial class AAmain : Form
    {
        public AAmain()
        {
            InitializeComponent();
        }

        private string FileLoc = null;

        private void AAmain_Load(object sender, EventArgs e)
        {

        }


        private void btnSend_Click(object sender, EventArgs e)
        {
            Stream strm;

            try
            {
                // Test:
                string url = @"https://securep.rsk.is/stadgreidsla/stadgreidslaws/thjonusta.asmx";
                // Life:
                //string url = @"https://secure.rsk.is/stadgreidsla/stadgreidslaws/thjonusta.asmx";

                //proxyStadgreidslaWSE.Stadgreidsla stadgr = new proxyStadgreidslaWSE.Stadgreidsla();
                Stadgr.Stadgreidsla stadgr = new SendaStgrXML.Stadgr.Stadgreidsla();

                OpenFileDialog ofd = new OpenFileDialog();
                ofd.RestoreDirectory = true;

                if (ofd.ShowDialog() != DialogResult.OK)
                {
                    MessageBox.Show("Hætt við");
                    return;
                }

                if ((strm = ofd.OpenFile()) == null)
                {
                    MessageBox.Show("Engin skrá");
                    return;
                }

                Stadgr.Thjonusta thjon = new SendaStgrXML.Stadgr.Thjonusta();
                thjon.Url = url;

                /*  byte[] test = new byte[2000];

                strm.Read(test, 0, 2000);
                MessageBox.Show(ConvertByteArrayToString(test));*/

                XmlSerializer s = new XmlSerializer(typeof(SendaStgrXML.Stadgr.Stadgreidsla),
                    "http://rsk.is/rafraenstadgreidsla/");

                //stadgr = (SendaStgrXML.Stadgr.Stadgreidsla)s.Deserialize(strm);
                strm.Close();

                // This call is for error checking.
                SendaStgrXML.Stadgr.VilluprofaSkilagreinResponseSvarVilluprofun svar = 
                    new SendaStgrXML.Stadgr.VilluprofaSkilagreinResponseSvarVilluprofun();
                svar = thjon.VilluprofaSkilagrein(stadgr);

                // This one is for actual transmission of data:
                SendaStgrXML.Stadgr.SendaSkilagreinResponseSvar svar =
                    new SendaStgrXML.Stadgr.SendaSkilagreinResponseSvar();    
                svar = thjon.SendaSkilagrein(stadgr);

                // Does not apply to you:
                /*SendaStgrXML.Stadgr.SendaSkilagreinLokadArResponseSvar svar =
                    new SendaStgrXML.Stadgr.SendaSkilagreinLokadArResponseSvar();
                svar = thjon.SendaSkilagreinLokadAr(stadgr);*/

                MessageBox.Show(svar.Villubod);

                if (svar.Skilagildi !=-1)
                    MessageBox.Show("Sending tókst");
                else
                    MessageBox.Show("Sending tókst ekki: " +
                                svar.Villubod); 
            }
            catch (Exception er)
            {
                MessageBox.Show(er.ToString());
            }

        }

        public static string ConvertByteArrayToString(byte[] byteArray)
        {
            return (new ASCIIEncoding()).GetString(byteArray);
        }

        private void btnForsendur_Click(object sender, EventArgs e)
        {
            Forsendur fs = new Forsendur();
            fs.Saekja();
        }

        private void btnEldra_Click(object sender, EventArgs e)
        {
            Forsendur fs = new Forsendur();
            fs.Saekja_Eldra();
        }
    }

更新:

我会尝试更详细地描述我的问题,希望能更好。

我现在用 Delphi、Delphi 7 编写。我有一个相当简单的任务,那就是实现与Web 服务的连接。

主要目标是发送 XML 文件,然后接收答案(也是 XML 文件)。

我查看了 XML 数据绑定(bind)向导,发现我没有该向导的架构文件。停在那里。

我必须声明,我不需要任何帮助来解析或编写 XML 文件,如果我愿意的话,我可以轻松地构建对象列表。在这种情况下我不需要。 (对我来说,XML 只是一个 1..n 级 block 的 Ascci 文件,我已经构建了一个抽象方法来接收此类文件中“第 n”个值的数据属性)

回到问题..

我有一个 C# 代码,但无法弄清楚。例如,我没有看到任何类或模式来在运行时构建任何对象,也许它只是丢失了?

至少。如果这里有人可以帮助我(在 Stack Overflow 这么棒的地方)如何与这样一种 WEB 服务进行通信,那么我将非常感激。按照我的计划,要在 15 日之前完成这项工作,这是冰岛每月纳税交税日的最后一天。

最佳答案

该语言似乎是 C#。您可以使用Delphi 的XML 数据绑定(bind)向导(文件->新建->其他->XML)导入XML。

如果这实际上是 SOAP,您也许可以使用 WSDL 导入器(文件->新建->其他->WebServices->WSDL 导入器)来为您构建类。

关于xml - Delphi 7 与 XML 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5279807/

相关文章:

用于重命名 XML 元素的 Python

java - 如何创建一个包含 ViewPager 的折叠工具栏?

web-services - Delphi 2007 SOAP 故障处理

c# - 如何从 WCF asmx C# 获取客户端的计算机名称?

c# - 继承的属性不会出现在 asmx 文件的 soap 样本中

java - 使用 ascii 编码而不是字符实体对 xml 进行编码

xml - 如何在 SOAPUI 中处理 http 日志中的 UTF-8 字符编码

delphi - Delphi 的 TWAIN 扫描组件

delphi - 我的自定义控件闪烁。是什么原因造成的以及如何消除它?

javascript - 如何仅使用 JavaScript 下载文件