我在 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/