UML软件工程组织

 

 

WebLogic Workshop实现对.NET Web服务互操作
 
出处:it168.com
 

Web服务应该允许不同供应商提供的应用能够在完全不同的硬件平台上运行,可以相互找到对方,并通过一套公共的协议和数据格式实现通信,这些协议包括SOAP,UDDI和WSDL。本文将展示Miscrosoft的.NET平台上的Web服务和BEA的WebLogic平台之间的互操作是如何实现的。首先介绍的是怎样在各个平台上创建Web服务定义语言(Web Services Definition Language,WSDL)文件,接着讨论如何使用WSDL文件调用在各个平台上的Web服务。最后,我将演示每个平台所具有的强大而不标准的特性如何被其他平台使用。

    两个简单的web服务

    在第一个例子中,我们将创建两个非常相似的Web服务,一个在.NET下创建,另一个在WebLogicshop下创建。这些Web服务都只有一个方法:getHelloMessage,该方法将返回一个问候消息框。在本例中,我们将展示如何通过其他平台分别调用这些Web服务。

    以下是WebLogic Workshop服务的代码: 
public class WLWExample
{ /** @jws:operation */
public String getHelloMessage()
{ return "Hello from WebLogic Workshop!"; }} 

    以下是.NETWeb服务的代码: 
using System.ComponentModel;
using System.Web.Services;
namespace DotNetExample
{
public class Service1 : WebService
{
public Service1()
{ InitializeComponent(); }
private IContainer components = null;
private void InitializeComponent() {}
protected override void Dispose( bool disposing )
{ if(disposing && components != null) components.Dispose();
base.Dispose(disposing); }
[WebMethod] public string getHelloMessage()
{ return "Hello from Visual Studio .NET!"; } }}    

    为了写出能调用这些服务的代码,我们首先必须快速地了解一下Web服务互操作的工作原理。

    Web服务如何互操作?

    Web服务互操作的核心是Web服务定义语言(WSDL)。WSDL是一种XML语言,它允许Web服务以一种与平台无关的方式发布其公共约定。WSDL语言用于描述Web服务提供的方法,以及该方法可以产生和接收的消息。WSDL是两个不同Web服务用以向对方描述各自的Web服务的公共格式。

    为实现上述两个Web服务的跨平台调用,首先必须为这两个Web服务生成WSDL文件。在WebLogic Workshop上和Visual Studio .NET上,这一过程稍微有些不同,但都很简单。

    在WebLogic Workshop上创建WSDL

    1. 在项目树上,右键单击Web服务,选择“Generate WSDL from JWS”(从JWS生成WSDL)。这样就可以为Web服务创建一个WSDL。每创建一个WSDL,项目树都会将其作为Web服务的子项显示出来。

    WebLogic Workshop使用一种特殊的命名约定为WSDL文件和CTRL文件(后面将加以讨论)命名。如果Web服务名为Service.jws,那么该服务的WSDL文件将被命名为ServiceContract.wsdl,而CTRL文件将被命名为ServiceControl.ctrl。 

   如果.NET Web服务正在运行,你应该就可以运行上述Web服务了,并且可以通过callDotNet方法跨平台调用.NET Web服务。CallDotNet方法将返回一个响应消息,该消息包含了.NET的问候消息:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soap:Body> <getHelloMessageResponse xmlns="http://tempuri.org/"> <getHelloMessageResult> Hello from VisualStudio.NET! </getHelloMessageResult> </getHelloMessageResponse> </soap:Body></soap:Envelope>

    从.NET调用WebLogic Workshop服务

    前面我们在WebLogic Workshop平台上调用了一个.NET平台上的Web服务,接下来将介绍在.NET平台上调用WebLogic Workshop平台上的Web服务。在WebLogic Workshop上,我们通过服务控件来调用外部的另一个Web服务;在.NET上,我们将采用Web引用。

在本例中假设Web引用名为WebReference1,所指向的Web服务名为WLWExample,这与上一个例子一样。WLWExample有一个名为startMethod的方法,该方法用于开始一个对话。对于例中的字符串“convID”和“callbackLoc”,应该用实际需要的会话ID和调用返回点替换。

    你可以用极其相似的代码(将StartHeaderValue替换为ContinueHeaderValue)来调用后面的方法。

 

组织简介 | 联系我们 |   Copyright 2002 ®  UML软件工程组织 京ICP备10020922号

京公海网安备110108001071号