从.NET调用会话Web服务
在WebLogic Workshop上使用会话(conversation)比较简单,而且是透明的。但是,如果要在.NET上调用会话Web服务,就必须做一些额外的工作,确保会话功能的一致性。
当Web服务的一个客户端调用会话方法时,WebLogic Workshop通过会话键(Conversation key)来决定要调用的会话方法是哪一个。会话键是嵌入在送往Web服务的SOAP消息的头部的。对于start方法,头部的格式如下:
<conversationID>convID</conversationID>
<callbackLocation>callback</callbackLocation>
</StartHeader>
会话ID和调用返回点(Callback location)都是可选的。如果你没有提供会话ID,WebLogic Workshop将自动生成一个会话ID。调用返回点用于指定WebLogic Workshop将调用返回的消息发往的地点。
对于continue方法,会话头部的格式如下:
<conversationID>convID</conversationID>
</ContinueHeader>
调用continue方法时,必须指定会话ID,因为你需要通过某种途径告诉WebLogic Workshop当你调用continue方法时你要加入哪一个会话。调用返回点并不是必不可少的,因为在对start方法的调用中已经指定了。
向.NET Web服务的客户端添加SOAP头部相当简单。会话Web服务所对应的WSDL文件已经指明了start头部和continue头部的结构,因此.NET现在就可以知道这些头部的格式了。当.NET创建一个Web引用时,对应于WSDL中指明的每个SOAP头部,.NET就为该Web引用添加一个相应的域:
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)来调用后面的方法。
在WebLogic Workshop上使用.NET数据集
数据集(DataSet)是一种Microsoft活动数据对象(Microsoft Active Data object),用于实现一种常见的对数据的相关包装器(relational wrapper)。数据集将数据装在一套表中,这些表的结构跟SQL语言中表的结构很相似,这些表都有一些特定的列,按特定的次序排列,每列对应于一种特定类型。数据集对象为装载和操作数据提供了极大的便利。然而,考虑到本文的目的,我们对此不再赘述,而是将注意力放到数据集的串行化机制上来。
