2

我想从一个在国际上运送产品的 ASP.Net 电子商务应用程序中一次获得每笔交易或批量的 DHL 运费(存储在表格中以备后用),但是在下载了他们的基于 J2EE 的工具包之后(https://xmlpi-ea.dhl.com)并查看文档和示例,我不太确定如何在 .Net 中执行此操作。如果有人有获得 DHL 运费的经验,我会很感激使用 .Net 在正确方向上的一点。因为我不懂Java。

编辑 刚刚发现 servlet 是不可发现的,这意味着我不能 WSDL 它来获取代理类,并且将不得不依靠他们的大量 XML 示例来构建我自己的客户端。有人已经在.NET 中做过了吗?

4

2 回答 2

0

看起来他们有您可以使用的网络服务。

http://www.dhl-usa.com/en/express/resource_center/integrated_shipping_solutions.html

于 2013-07-13T16:30:37.197 回答
0

抱歉迟到了。我刚刚完成了集成的开发,我在这里为您提供了方法。

首先,您必须使用 xsd2code++,因为 Microsoft 的 XSD.EXE 不起作用。不要问我为什么,但它没有找到 XSD 文件中包含的导入,或者我没有充分挖掘原因,一旦我尝试了 xsd2code++,只需在 Visual Studio 中右键单击 XSD 并使用选项就轻而易举了那里。

将 XSD 转换为类后,您可以使用以下 3 种方法来使用它。请参阅使用这些方法的以下 2 行代码。不要忘记为 XDocument 添加必要的使用。

在 DHL 网站上注册后,您可以下载 DHL Toolkit PI,其中包含所有 XSD 文件所在的文件夹 XSD。

注意:Xsd2Code++ 的替代方案是 CodePlex 上的 Xsd2code:XSD2CODE快点,因为 CodePlex 正在关闭

string Request = XDocument.Parse(SerializeToXML(Quote)).ToString();
string Response = XDocument.Parse(SendRequest(Request)).ToString();

if (Response.IndexOf("DCTResponse") != -1)
    DCTResponse = DeserializeFromXML<DHL.Response.DCTResponse>(Response);
else
    DCTErrorResponse = DeserializeFromXML<DHL.Response.ErrorResponse>(Response);

public static string SendRequest(string XML)
        {
            string Response = "";

            try
            {
                HttpWebRequest myReq = null;

                myReq = WebRequest.Create(Properties.Settings.Default.DHLURL) as HttpWebRequest;
                myReq.ContentType = "application/x-www-form-urlencoded";
                myReq.Method = "POST";

                using (System.IO.Stream stream = myReq.GetRequestStream())
                {
                    byte[] arrBytes = ASCIIEncoding.ASCII.GetBytes(XML);
                    stream.Write(arrBytes, 0, arrBytes.Length);
                    stream.Close();
                }

                WebResponse myRes = myReq.GetResponse();
                System.IO.Stream respStream = myRes.GetResponseStream();
                System.IO.StreamReader reader = new System.IO.StreamReader(respStream, System.Text.Encoding.ASCII);
                Response = reader.ReadToEnd();
                myRes.Close();
                myRes = null; 
        }
            catch (Exception ex)
            {
                Response = ex.ToString();
            }

            return Response;
        }
public static string SerializeToXML<T>(T toSerialize)
        {
            string Result = "";

            XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", "");
            using (TextWriter tw = new StringWriter())
            {
                using (XmlWriter writer = XmlWriter.Create(tw, new XmlWriterSettings { OmitXmlDeclaration = true }))
                {
                    new XmlSerializer(typeof(T)).Serialize(writer, toSerialize, ns);
                    Result = tw.ToString();
                }
            }

            return Result;
        }
public static T DeserializeFromXML<T>(string xml)
        {
            var serializer = new XmlSerializer(typeof(T));
            return (T)serializer.Deserialize(new StringReader(xml));
        }

希望这可以帮助...

于 2017-09-07T06:59:37.990 回答