网络通信 频道

网络医生成长记:网络故障快速定位

    从WSDL创建Web引用

    1. 打开“Project”菜单,选择“Add Web Reference”。

    2. 在弹出的对话框中,你可以浏览各种Web服务。请在地址文本框中输入WSDL文件的路径,该WSDL文件是你为WebLogic Workshop Web服务创建的。

    3. 选择“Add Reference”按钮。

    这样就为你的项目添加了一个指向WebLogic Workshop Web服务的Web引用。在默认情况下,该引用命名为WebReference1。通过Solution Explorer,你可以看到这个新创建的引用已经被添加到项目里面了,在引用的下方,你可以找到该引用所出自的WSDL。

    在C#中,你可以像使用其他任何对象一样来使用Web引用。首先,必须将Web引用导入到源文件中。你可以在C#文件中添加下面这行代码:
    using DotNetClient.WebReference1;
    将引用导入到源文件之后,就可以创建该Web引用的一个新的实例,并通过这个实例调用WebLogic Workshop上的Web服务。下面的代码演示了一个用C#描述的完成这些工作的Web服务:
using System.ComponentModel;
using System.Web.Services;
using DotNetExample.WebReference1;
namespace DotNetClient
{ 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); }
private WLWExample wlwExample = new WLWExample();
[WebMethod] public DataSet callWLW() { wlwExample.getHelloMessage(); } }}

    如果调用了callWLW方法,就可以收到来自WebLogic Workshop Web服务的问候消息。 
<?xml version="1.0" encoding="utf-8" ?>
<string xmlns="http://tempuri.org/"> Hello from WebLogic Workshop!</string> 

    从.NET调用会话Web服务

    在WebLogic Workshop上使用会话(conversation)比较简单,而且是透明的。但是,如果要在.NET上调用会话Web服务,就必须做一些额外的工作,确保会话功能的一致性。

    当Web服务的一个客户端调用会话方法时,WebLogic Workshop通过会话键(Conversation key)来决定要调用的会话方法是哪一个。会话键是嵌入在送往Web服务的SOAP消息的头部的。对于start方法,头部的格式如下:
<StartHeader>
<conversationID>convID</conversationID>
<callbackLocation>callback</callbackLocation>
</StartHeader>

    会话ID和调用返回点(Callback location)都是可选的。如果你没有提供会话ID,WebLogic Workshop将自动生成一个会话ID。调用返回点用于指定WebLogic Workshop将调用返回的消息发往的地点。

    对于continue方法,会话头部的格式如下:
<ContinueHeader>
<conversationID>convID</conversationID>
</ContinueHeader>

    调用continue方法时,必须指定会话ID,因为你需要通过某种途径告诉WebLogic Workshop当你调用continue方法时你要加入哪一个会话。调用返回点并不是必不可少的,因为在对start方法的调用中已经指定了。

    向.NET Web服务的客户端添加SOAP头部相当简单。会话Web服务所对应的WSDL文件已经指明了start头部和continue头部的结构,因此.NET现在就可以知道这些头部的格式了。当.NET创建一个Web引用时,对应于WSDL中指明的每个SOAP头部,.NET就为该Web引用添加一个相应的域:

// A web reference to a conversational web service.private WLWExample wlwExample;
[WebMethod] public void callStartMethod()
{ wlwExample.StartHeaderValue = new WebReference1.StartHeader();
wlwExample.StartHeaderValue.conversationID = “convID”;
wlwExample.StartHeaderValue.callbackLocation = “callbackLoc”;
wlwExample.startMethod();}

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

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

0
相关文章