65.9K
CodeProject 正在变化。 阅读更多。
Home

如何通过 SOAP 从 Java 消费 ASP.NET Web 服务

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.37/5 (22投票s)

2004年1月16日

4分钟阅读

viewsIcon

488836

downloadIcon

6827

演示了如何在其他语言和平台中的客户端调用 ASP.NET Web 服务

Sample Image - WSfromJava.jpg

引言

如果您需要从不支持 .NET 的语言或平台消费 ASP.NET Web 服务,本文将很有用。在此示例中,我正在从 Java Applet 消费 Web 服务,但只需少量工作即可将我的代码改编为 Java 应用程序。尽管我只在 Windows XP 上测试过此功能,但该代码应可在其他平台上运行,从而实现 ASP.NET Web 服务的跨平台客户端消费。

我开发此解决方案是因为我需要为我的 ASP.NET 应用程序添加复杂的客户端处理。我不想处理主流浏览器使用的所有略有不同的 JavaScript 实现,这促使我考虑使用 Java Applet。

本文向您展示了如何在网页中使用 Java Applet,并通过在客户端消费 XML Web 服务来使其与 ASP.NET 进行通信。

背景

毫无疑问,有人可能出于多种原因想要跨平台消费 ASP.NET Web 服务,但这是我的故事。

我有一个 ASP.NET 应用程序,我需要在其中添加客户端图像处理功能。我研究了使用 JavaScript 编写客户端代码,这似乎是显而易见的选择,但由于浏览器实现的不同而感到沮丧,尤其是在尝试使用图像处理功能时。例如,如果您想对图像进行 alpha 混合,您需要在 Netscape 中使用 img.style.MozOpacity,在 Internet Explorer 中使用 img.filters.alpha.opacity,而 Opera 则完全无法做到这一点。我真的不想为每种浏览器编写特殊代码,也不想将功能降级到最低公分母。

因此,我决定尝试使用 Java 1.1 编写我的客户端代码。请注意,我使用的是 Java 1.1 SDK,因为 Internet Explorer 目前不支持使用 Java SDK 1.1.4 之后的 SDK 开发的代码(尽管在我看来,Java SDK 1.1.7 代码在 IE 中似乎运行良好)。Java Applet 可以完成我所需的所有图像处理,并且受到许多浏览器的支持。最后,我无需为每种浏览器编写单独的代码。

下一个问题是,如何将 Java Applet 中完成的数据处理结果返回到我的 ASP.NET 应用程序?我找到的答案是创建一个 ASP.NET Web 服务,并在 Java Applet 中进行消费。

一个简单示例

看一下以下非常基础的 Web 服务

    [WebMethod]
    public string ConcatWithSpace(string one, string two)
    {
        return one+" "+two;
    }

通过让 Java Applet 向 webservice.asmx/ConcatWithSpace?one=FirstValue&two=SecondValue 发出请求,可以非常简单地消费它……但是如果我们想向 Web 服务发送大量数据怎么办?我们如何才能在 Java Applet 中实现 SOAP 请求和响应……?如果您使用的是更新的 Java SDK,可能有许多选项,但由于我想支持包括 Internet Explorer 在内的许多浏览器,所以我只能使用 Java 1.1 SDK。但是,这为我们提供了一个更好的机会来理解如何在其他语言和平台上与 ASP.NET Web 服务进行通信。因此,我编写了自己的 Java 类 SoapRequestBuilder,它使消费服务并返回单个 string 响应变得相当容易。看一下这个示例,它消费了上面的 Web 服务

    SoapRequestBuilder s = new SoapRequestBuilder();
    s.Server = "127.0.0.1"; // server ip address or name
    s.MethodName = "ConcatWithSpace";
    s.XmlNamespace = "http://tempuri.org/";
    s.WebServicePath = "/SimpleService/Service1.asmx";
    s.SoapAction = s.XmlNamespace+s.MethodName;
    s.AddParameter("one", "David");
    s.AddParameter("two", "Hobbs");
    String response = s.sendRequest();

在此示例中,在将两个参数发送到 Web 服务后,response string 被填充了来自 Web 服务的返回值。SoapRequestBuilder 类的完整源代码包含在源文件中。

就是这样!这只是一个非常简单的示例,目前我只对从 Web 服务返回单个值感兴趣,但我已经使用了类似的方法来处理与我的后端数据库通信的 Web 服务,这使得我的 Java Applet 能够存储数据,然后 ASP.NET 页面可以访问这些数据。

要运行示例代码,请先设置 Web 服务,然后将 Java Applet 文件复制到同一台机器上的任何文件夹,然后双击 HTML 文件。所有参数都在 HTML 文件中配置,因此您可以通过编辑 HTML 来更改传递给 Web 服务的参数;您无需重新编译 Java 源代码。我已在 Windows XP 上的 IE 6.0、Netscape 7.1 和 Opera 7.23 中测试了此示例。

注释

某些 Java 虚拟机(例如 Microsoft 的)只允许您连接到托管 Java 类文件的同一台机器上的套接字。因此,如果您像我一样使用 Applet,您需要将 Java 类文件托管在 Web 服务所在的同一台机器上。

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.