我在Delphi (在pascal工作了30年)有一些(5年的经验),但在WEB编程方面没有那么多经验。我已经在我的一些程序中安装了FTP (文件传输)和SMTP (邮件)支持,并取得了成功。此外,我还使用了HTTP (Get),然后解析了一些字符串,也很成功。但是,就是这样!
现在,我不得不连接到https (安全) url,并使用ASMX服务来发送和接收XML文件。该文件没有问题,已经过测试。
但是..。我几乎不知道如何用Delphi 7实现这种连接。我怀疑SOAP (简单对象访问协议)和这个可疑的-ion是从下面的例子中提出来的,在这里,它在没有可视化类的情况下“凭空”创建对象,但我不确定!
编写的示例是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();
}
}更新:
我将尝试更详细地描述我的问题,并希望更好。
我用德尔菲写的,德尔菲7和今天一样。我有一个相当简单的任务,就是实现到Web服务的连接。
主要目标是发送XML文件,然后接收一个答案(也是XML文件).
我查看了XML数据绑定向导,发现我没有该向导的架构文件。停在那儿。
我必须声明,我不需要任何帮助来解析或编写XML文件,如果我自己喜欢的话,我可以轻松地构建对象列表。在这种情况下我不需要。(对我来说,XML只是一个包含1.n级块的Ascci文件,我已经构建了一个抽象方法来接收此类文件中“n”值数据的属性)
回到问题..。
我有一个c#代码,但找不到它。例如,我没有看到在运行时构建任何对象的任何类或模式,可能只是缺少了吗?
至少。如果这里有人能帮助我(在这个奇妙的地方,就像Stack溢出一样)如何与这种WEB服务进行通信,那么我将非常感激。我的计划是在15号之前完成,这是冰岛每月交税日的最后一天。
发布于 2011-03-12 03:58:20
语言似乎是C#。您可以使用Delphi的XML数据绑定向导(File->New->Other-> XML )导入XML。
如果这实际上是SOAP,您可能可以使用WSDL导入器(File->New->其他->WebServices->WSDL导入器)为您构建类。
https://stackoverflow.com/questions/5279807
复制相似问题