Domino webservice应用技巧.docx_第1页
Domino webservice应用技巧.docx_第2页
Domino webservice应用技巧.docx_第3页
Domino webservice应用技巧.docx_第4页
Domino webservice应用技巧.docx_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Domino webservice应用技巧一、创建webservice1、Domino中的webservice界面打开Designer端,打开一个Notes数据库,展开到web service,如下图:图 1上图中的web服务中心库,是indioffice自带的一个存放webservice的数据库,你也可以自己创建一个新的数据库或使用其他已有的数据库来创建你自己的webservice。2、设置数据库ACL目前indioffice提供的webservice所在数据库是匿名可访问的,可以通过webservice传入参数中的用户名密码来控制webservice是否执行。但是理论上,将数据库设置为匿名不可访问,通过类似soapHeader传入用户名密码,来控制访问应该也是可以实现的,不过目前由于产品这边没有合适的环境,还没有尝试,项目如果有机会可以试一下,如果可以还请把测试结果向产品反馈一下。3、建立webservice在“图1”中,点击“新建web service”按钮,进入webservice新建页面。详细步骤参见附件一:Domino中运用webservice。下面为简要步骤:A、Webservice属性的第一个页签名称:这个webservice的名称,是暴露给调用方的,例如上图中的webservice,调用方可通过下面这个url打开:http:/域名/indishare/webservice所在数据库.nsf /wsForGetNews?wsdlPortType类:Web 服务接口的类的名称,必须同代码中的Class类名一致。B、第二个页签按缺省设置即可:C、第三个页签D、代码设计Webservice可以是用Java写的或者用lotusscript写,一般在处理Domino文档时,用lotusscript编写webservice会更方便,但对于一些特殊操作,比如一些xml操作(虽然ls提供了部分xml操作类,但是不够用)还是必须用java实现。下面,我们以ls为例进行介绍:在Options中可以包含要引入的一些类库,如:主函数写在Declaration里,当然不应该把所有处理逻辑都写在主函数里,还是要按逻辑功能,将代码切分到子函数中进行,如下图,就是把获取新闻的功能拆分到函数fnGetNews中:获取新闻的函数代码如下:E、运行结果到现在,一个简单的获取Domino数据库中新闻标题列表的webservcie就创建完成了,接下来,我们可以在浏览器中打开此webservice看看效果,在浏览器中输入如下地址:http:/域名/indishare/webservice所在数据库.nsf /wsForGetNews?wsdl如果出现上图效果,那么至少表示该webservice在格式和配置上已经通过了,但是不代表代码逻辑没有问题,如果要检验代码逻辑,可以找一些webservice的运行环境来测试,目前产品这边使用的是.net webservice studio,运行这个工具时,还需要安装.net framework 2.0。打开.net webservice studio,在message页签中,输入wsdl的url后,点击“get”按钮,出现上图中的ready提示信息后,表示此webservice可正常访问,那么接下来,切换到invoke页签,如下图:按上图点击顺序后,在value中输入5,表示要获取5条新闻标题,然后点击“invoke”按钮,在output中,可以看到如下结果:4、总结所以我们可以发现,Domino中的webservice都是domino封装好的,并没有那么复杂也没有那么神秘,如果你只会写lotusscript,同样可以通过上面简单的步骤,就可以开发一个webservice。二、Domino中调用webservice目前Indioffice中还没有应用到调用外部webservice的功能,不过项目如果需要用的话,可以参考附件一的第二部分。附件一、网络资源Domino中运用webservice说明:此处引用的为网络资源,非官方Lotus Domino V7.0 在 Lotus Domino Designer 中引入了新的 Web 服务设计元素。因此在Lotus Domino应用开发中使用Web 服务变得更加容易。其中Lotus Domino 负责处理所有的 WSDL 创建和 SOAP 操作,我们所要做的事情就是在 Web 服务设计元素中编写代码,设计Web 服务。Lotus Domino 就可以发布 WSDL 文件、将引入的 SOAP 请求转换为类上的方法调用以及返回方法的结果(如果有的话)作为 SOAP 响应。Lotus Domino Web 服务可以用lotus script,java两种语言编写。而调用Web 服务的方法却有很多。1、设计Web 服务点新建Web 服务。设计自己的Web 服务。Web Service Properties 框中的 Basics 附签对 Basic 附签上的字段说明如下:Name(必需的):Web 服务的名称,是客户机访问 WSDL 文件或服务的方法时所使用的名称。 Alias:除 Name 之外的另一名称,用户使用该名称可以访问服务。 Comment:有关 Web 服务的信息数据的字段(通常,该字段的信息不超过一句话;有关 Web 服务的较长描述或信息应写在代码的注释中)。 Warn if the WSDL interface is modified:该选项警告您对代码所做的更改是否修改了由 Web 服务产生的 WSDL 文件。这对于确保 WSDL 文件的一致很有用,但是应该意识到,如果选中了该选项,则您将无法保存带有已修改的 WSDL 文件的服务。 PortType class(必需的):用作 Web 服务接口的类的名称。换句话说,它就是 Web 服务代码中带有用户可访问的 public 方法的类。 框中的第二个附签是 Security 附签(参见图 4)。图 4. Web Service Properties 框中的 Security 附签对 Security 附签上的字段说明如下:Run as web user:该选项使 Web 服务代码能够在调用 Web 服务的用户的安全性上下文中运行(默认情况下,它将在 Lotus Domino Designer 中最后签名 Web 服务的那个 ID 的安全性上下文中运行)。 Run on behalf of:该字段允许指定用户,如果想让 Web 服务代码运行在特定用户的安全性上下文中,而不是 Lotus Domino Designer 中最后签名 Web 服务的那个 ID 的安全性上下文中。 Allow remote debugging:该选项允许远程调试 Web 服务(有关远程调试的信息,请参阅 Lotus Domino Designer 帮助主题 “Using the Remote Debugger”)。 Profile this web service:该选项将在 Web 服务运行时使其生成分析信息(有关分析的信息,请参阅 Lotus Domino Designer 帮助主题 “Profiling agents and Web services”)。 Set runtime security level:设置为 1,允许大多数 LotusScript 和 Java 操作正确运行;对于读/写文件、创建 COM 对象或执行网络操作等,根据需要,设置为 2 或 3(有关更多信息,请参阅 Lotus Domino Designer 帮助主题 “Restricted LotusScript and Java agent operations”)。 Default access for this web service:该选项允许控制哪些用户可以访问 Web 服务,并超出了使用数据库 ACL 所能进行的控制(如果 Anonymous 用户无法访问 Web 服务,则当用户尝试进行连接时,将收到错误 401 Access Denied 或 404 Not Found)。 Allow Public Access users to use this web service:该选项使得仅拥有数据库 ACL 中 “Read Public Documents” 访问权的用户可以使用该 Web 服务,当不想为大量用户授予完全的 Reader 访问权限(或更高级别)时,这点很有用。 框中的第三个附签是 Options 附签(参见图 5)。图 5. Web Service Properties 框中的 Options 附签对 Options 附签上的字段说明如下:Programming model:可用选项是 RPC 或 Message(大多数情况下使用 RPC)。 SOAP message format:在该字段中,为此 Web 服务选择 SOAP 消息格式,Lotus Domino V7.0 中的默认格式是 RPC/encoded。 Include operation name in SOAP action:该选项要求操作名称存在于外来请求的 SOAP 动作标头中(很少需要)。 Port type name:默认情况下,该字段值与 Basics 附签上 PortType class 字段的值相同(尽管您可以使用任何想用的名称)。生成 WSDL 文件时使用该值。 Service element name:默认情况下,该字段值是 PortType 名称加上单词 Service(尽管您可以使用任何想用的名称)。生成 WSDL 文件时使用该值。 Service port name:默认情况下,该字段值是 Domino(尽管您可以使用任何想用的名称)。生成 WSDL 文件时使用该值。 可以选择是用lotus script 或JAVA语言编辑你的Web 服务。以下是lotus script编写的一个简单的例子。%INCLUDElsxsd.lssClasssaveworkflowSubNEWEndSubFunctionsaveworkflowxml(xmlfilenameAsString,xmltextAsString)AsString OnErrorGotoerrhandle DimoutputStreamAsNotesStream DimsessionAsNewNotesSession SetoutputStream=session.CreateStream DimoutputFileAsString outputFile=Curdir$()+datadominohtmlworkflow+xmlfilename IfoutputStream.Open(outputFile)Then CalloutputStream.WriteText(xmltext,EOL_CRLF) CalloutputStream.CloseEndIf saveworkflowxml=1 ExitFunctionerrhandle: MsgboxStr(Err)+行号:+Str(Erl)+错误信息saveworkflow:saveworkflowxml+Error$ResumeNextEndFunctionEndClass2、Web 服务的调用A、lotus script代理中调用webservice。在window平台上我们可以使用MSSOAP toolkit来调用。可以下载MSSOAP toolkit3.0,并在服务器上安装MSSOAP toolkit3.0。在代理中的代码如下:SubInitializeOnErrorGotoerrhandleDimssAsNewNotesSessionDimdocAsNotesDocumentSetdoc=ss.DocumentContextDimclientAsVariantDimxmlfilenameAsStringDimxmltextAsStringxmlfilename=doc.xmlfilename(0)xmltext=doc.xmltext(0)SetClient=CreateObject(MSSOAP.SoapClient30)CallClient.mssoapinit(http:/server/mis/flow.nsf/saveworkflow?WSDL)DimresultAsStringIfNotClientIsNothingThenresult=Client.saveworkflowxml(xmlfilename,xmltext)Elseresult=nowebEndIfExitSuberrhandle:MsgboxStr(Err)+行号:+Str(Erl)+错误信息saveworkflowxml:+Error$ResumeNextEndSubB、javascript中调用 webservicevarxmlfilename=document.all.xmlfilename.valuevarxmltext=document.all.xmltext.valuevarxmlhttp=newActiveXObject(Microsoft.XMLHTTP);varsoapMessage,soapData,URL;/SetthesoapmessagesoapMessage=;soapMessage+=;soapMessage+=;/Setthedataforsoapbody-begin-soapData=;soapData+=+xmlfilename+;soapData+=+xmltext+;soapData+=;/Setthedataforsoapbody-end-soapMessage=soapMessage+soapData+;soapMessage=soapMessage+; varurlstr=http:/server/mis/flow.nsf/saveworkflow?openwebservicexmlhttp.Open(POST,urlstr,false);xmlhttp.SetRequestHeader(Content-Type,text/xml;charset=utf-8);xmlhttp.SetRequestHeader(SOAPAction,/onlineandmsg);xmlhttp.send(soapMessage);varx=xmlhttp.responseXML;C、FLASH 中调用webserviceimport mx.services.WebService;/定义WebService的路径;var ws_url:String = http:/server/mis/flow.nsf/saveworkflow?WSDL;/定义WebService对象;var ws:WebService = new WebService(ws_url);/调用WebService方法;var callObject = ws.SAVEWORKFLOWXML(_parent.workflowxml,_global.workxml.toString();/设置返回结果对象;callObject.onResult = function(result) trace(result);/如果调用错误返回信息(这个是可选的);callObject.onFault = function(fault) trace(fault:+fault.faultstring);D、java 代理中调用webservice,首先在代理工程中引入相关的包importlotus.domino.*;importjava.io.*;importjava.util.*;.*;importorg.w3c.dom.*;importorg.apache.soap.util.xml.*;importorg.apache.soap.*;importorg.apache.soap.encoding.*;importorg.apache.soap.encoding.soapenc.*;importorg.apache.soap.rpc.*;importorg.apache.soap.transport.http.SOAPHTTPConnection;publicclassJavaAgentextendsAgentBasepublicvoidNotesMain()trySessionsession=getSession();AgentContextagentContext=session.getAgentContext();Documentdoc=agentContext.getDocumentContext();Stringxmlfilename=doc.getItemValueString(xmlfilename)Stringxmltext=doc.getItemValueString(xmltext)/(Yourcodegoeshere)URLurl=newURL(http:/server/mis/flow.nsf/saveworkflow?WSDL);SOAPMappingRegistrysmr=newSOAPMappingRegistry();StringDeserializersd=newStringDeserializer();smr.mapTypes(Constants.NS_URI_SOAP_ENC,newQName(,Result),null,null,sd);/创建传输路径和参数SOAPHTTPConnectionst=newSOAPHTTPConnection();/创建调用Callcall=newCall();call.setSOAPTransport(st);call.setSOAPMappingRegistry(smr);cal

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论