在多种编程语言或平台中调用.NET Web服务是一个常见需求。本文以Java Applet为例,展示了如何在网页中使用Java Applet,并让其与ASP.NET进行通信,通过调用XML Web服务在客户端处理数据。
尽管调用ASP.NET Web服务的原因多种多样,但本文的出发点是为了在ASP.NET应用程序中添加复杂的客户端图像处理功能。考虑到浏览器对JavaScript的不同实现,尤其是图像处理特性的差异,决定尝试使用Java 1.1编写客户端代码。Java Applet能够满足所有的图像处理需求,并且被许多浏览器支持。
接下来的问题是如何将Java Applet中处理的数据结果回传到ASP.NET应用程序。解决方案是创建一个ASP.NET Web服务,并在Java Applet中调用它。
以下是一个非常基础的Web服务示例:
C#
[
WebMethod
]
public
string
ConcatWithSpace(
string
one,
string
two)
{
return
one+
"
"
+two;
}
如果需要向Web服务发送大量数据,如何在Java Applet中实现SOAP请求和响应?虽然使用更新的Java SDK可能有很多选项,但由于需要支持包括Internet Explorer在内的许多浏览器,使用的是Java 1.1 SDK。
为此,编写了一个名为SoapRequestBuilder
的Java类,它简化了服务的调用并返回单个字符串响应。以下示例展示了如何调用上述Web服务:
Java
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();
在这个示例中,response
字符串在发送两个参数给Web服务后,被填充了Web服务的结果。SoapRequestBuilder
类的完整源代码包含在源文件中。
要运行示例代码,请先设置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服务相同的机器上。