如何用go创建一个webservice,第1张

http包建立Web服务器

package main

import (

"fmt"

"net/http"

"strings"

"log"

)

func sayhelloName(w httpResponseWriter, r httpRequest) {

rParseForm() //解析参数,默认是不会解析的

fmtPrintln(rForm) //这些信息是输出到服务器端的打印信息

fmtPrintln("path", rURLPath)

fmtPrintln("scheme", rURLScheme)

fmtPrintln(rForm["url_long"])

for k, v := range rForm {

fmtPrintln("key:", k)

fmtPrintln("val:", stringsJoin(v, ""))

}

fmtFprintf(w, "Hello astaxie!") //这个写入到w的是输出到客户端的

}

func main() {

httpHandleFunc("/", sayhelloName) //设置访问的路由

err := httpListenAndServe(":9090", nil) //设置监听的端口

if err != nil {

logFatal("ListenAndServe: ", err)

}

}

上面这个代码,我们build之后,然后执行webexe,这个时候其实已经在9090端口监听http链接请求了。

在浏览器输入

可以看到浏览器页面输出了Hello astaxie!

可以换一个地址试试:

看看浏览器输出的是什么,服务器输出的是什么?

在服务器端输出的信息如下:

图38 用户访问Web之后服务器端打印的信息

我们看到上面的代码,要编写一个Web服务器很简单,只要调用http包的两个函数就可以了。

如果你以前是PHP程序员,那你也许就会问,我们的nginx、apache服务器不需要吗?go就是不需要这些,因为他直接就监听tcp端口了,做了nginx做的事情,然后sayhelloName这个其实就是我们写的逻辑函数了,跟php里面的控制层(controller)函数类似。

如果你以前是Python程序员,那么你一定听说过tornado,这个代码和他是不是很像,对,没错,Go就是拥有类似python这样动态语言的特性,写Web应用很方便。

如果你以前是Ruby程序员,会发现和ROR的/script/server启动有点类似。

服务器端的操作: 1 创建一个WebService项目。(不需要是Java EE 50) 2 创建包与接口以及实现类。 3 加上WebService的包 4 编辑配置文件 5 部署后在浏览器中测试: http://localhost:8080/testWebService/services, 格式是固定的

一、用 eclipse 创建一个 WebService 服务器端

1、 首先新建一个动态 web 工程,选择 File->New->Dynamic Web Project,命名为 axis。

2、 创建一个包, 再新建一个类,右击 src,选择 New->Class,命名为 AddService 添加方法 add: public class AddService { public int add(int a, int b) { return a+b; } }

3、右击 AddServicejava 文件,选择 Web Services->Create Web Service。

4、点击 next,选择方法 add,点击 next->Start server->Finish。这时可以看到 WebContent 目 录下多了个 wsdl 文件夹,axis 插件自动为我们生成了 AddServicewsdl。

5、我们可以对 AddService 的方法进行测试。右击 AddServicewsdl,选择 Web Services->Test with Web Services Explorer。选择 add 就可以该方法进行测试。

6、将 AddServicejava 复制到 WebContent 目录下,并改名为 AddServicejws。

7、启动 tomcat,在浏览器中输入 http://localhost:8080/axis/AddServicejws,应该会看到提示: There is a Web Service here,点击 Click to see the WSDL,看到一个 xml 文件就成功了。

8、将 workspace 下的 axis 工程里的 WebContent 复制到了 tomcat 的 webapps 目录下,并改 名为 axis,方便访问。 启动 tomcat 服务器,在浏览器中输入:

http://localhost:8080/axis/AddServicejwswsdl

至此,WebService 服务端成功发布。

二、用 eclipse 创建一个 WebService 客户端 1、 新建一个动态 Web 工程 addTest,再创建 WebService 客户端: File->New->Other->Web Services->Web Service Client。 (必须有 Web 工程才能创建 Web Service Client)

2、在 Service definition 输入框中输入地址: http://服务器 ip 地址:8080/axis/services/AddServicewsdl,单击下一步,选择输出文件夹,点 击 Finish。可以看到 src 下生成了一个包 DefaultNameSpace,里面有五个 java 文件。 (注意 输入地址跟前面的不一样) AddServicejava 定义了 Web 服务接口; AddServiceServicejava 定义了用于获取 Web 服务接口的方法; AddServiceServiceLocatorjava 接口 AddServiceService 的具体实现; AddServiceSoapBindingStubjava Web 服务客户端桩,通过该类与服务器交互。

3、新建一个测试类 TestAddService,为了方便,这个类和刚刚产生的五个类在一个包下。 内容如下:

package DefaultNamespace; public class TestAddService {

public static void main(String[] args) throws Exception{

try{

AddServiceService service = new AddServiceServiceLocator(); AddService add = servicegetAddService(); Systemoutprintln(addadd(1, 1)); }catch(Exception e){ eprintStackTrace(); } } }

4、右击 TestAddServicejava,Run As->Java Application。便可以控制台看到输出结果。

  Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。Internet Inter-Orb Protocol(IIOP)都已经发布了很长时间了,但是这些模型都依赖于特殊对象模型协议,而 Web Services 利用 SOAP 和 XML对这些模型在通讯方面作了进一步的扩展以消除特殊对象模型的障碍。Web Services 主要利用 HTTP 和 SOAP 协议使业务数据在 Web 上传输,SOAP通过 HTTP 调用业务对象执行远程功能调用,Web 用户能够使用 SOAP 和 HTTP通过 Web 调用的方法来调用远程对象的。

  实现方式:

  第一种:xfire

  Client client = new Client(new URL(url));

Object[] results = clientinvoke(operationName, new Object[]{ifuser,ifevent,input});

ret = (String)results[0] ;

  第二种:axis

  Service service = new Service();

Call call = (Call)servicecreateCall();

callsetTargetEndpointAddress(new javanetURL(url));// 设置webservice服务的url地址

callsetOperationName( operationName);// 调用的后台webservice服务的方法为exchange

  ret = (String)callinvoke(new Object[] {input});// 调用后台webservice服务

  

  以上两种实现方式,在项目中已经使用了,运行正常。但是项目初期开始用的还是碰到一些问题,如果服务器端是java开发的,用axis掉用服务端的时候,没有问题。如果服务器端是net开发的,会碰到莫名奇妙的问题,我估计net服务器端参数配置修改一下应该可以调得通,由于时间紧张,我就没有深究了。换了xfire掉服务器端,结果是两种不同语言实现的系统,都可以调通了。

 WebService目前可是目前计算机界一个非常流行的技术了 以至于有些人把WebService列入目前最热门的十大技术之一 的确随着互联网的广泛应用和发展 尤其是电子商务的发展 出于互联网上各种复杂的应用系统和对更高安全性的要求 WebService的横空出世的确满足了当前这些的要求和需要 其中的原因在下文中有详细的介绍 本文的主要内容是简要介绍一下WebService的相关知识 以及使用VisualBasic Net实现WebServices的具体方法和典型步骤

 一 WebService为何物 我们为什么需要它

 WebService的主要功能就是可以实现实现跨平台的功能调用 同时由于WebService中使用XML来进行数据交换 所以在使用WebService时不用担心防火墙的影响 由于WebService集成了各种功能 并提供了一个友好的界面 所以在WebService能够实现软件的重用

 另外WebService的调用非常简单 简而言之调用互联网上的WebService就如同调用本地的组件一样简单 就是通过HTTP协议来调用互联网上的组件 至于具体的调用方法 请参阅本文第五节第七段的内容 所以Web Service就是互联网上的组件调用

 二 和Web Service相关的标准 协议

 Web Service是通过一系列标准和协议来保证和程序之间的动态连接和实现其安全调用的 其中主要的标准和协议是 XML WSDL SOAP HTTP UDDI 下面就简要介绍这些标准和协议

  XML Web Service之间和Web Service和应用程序之间都是采用XML进行数据交换的 Web Service由于基于了XML 这样Web Service在具备XML带来的优势的同时 也拥有了由于XML所带来的缺点 其中XML所带来的最重要缺点就是Web Service将大量的占有CPU的资源 因为XML数据要经过多步处理才能被系统使用 所以 即使调用一个功能较小的Web Service 也会感觉速度很慢 所以网络中对运行Web Service的主机要求是很高的

  HTTP 应用程序是提供HTTP协议来调用Web Service的 所以HTTP在Web Service调用过程中 起著通道的作用

  WSDL 是Web Service描述语言的简写 它是XML格式 其作用是描述Web Service 指示应用程序和与Web Servie交互的方法 当实现了某种Web Service服务时 为了让别的程序调用 就必须告诉此Web Service的接口 如 服务名称 服务所在的机器名称 监听端口号 传递参数的类型等等 WSDL就是规定了有关Web Services描述的标准

  UDDI 是Universal Description Discovery and Integration的缩写 简单说 UDDI用于集中存放和查找WSDL描述文件 起著目录服务器的作用

  SOAP 是 Simple Object Access Protocol 的缩写 即 简单对象访问协议 SOAP是一种消息传递的协议 它规定了Web Services之间传递信息的方式

 三 本文章的程序设计 调试和运行的环境

 ( ) 微软公司视窗 中文企业版

 ( ) Visual Studio Net 企业构建版 Net FrameWork SDK 版本号

 ( ) IIS服务启动

 四 Visual Basic Net实现Web Service

  Net 的大的推动了Web Service的发展 而Visual Studio Net的出现又极大的推动了Web Service的的广泛应用 在Visual Studio Net推出之前 编写一个Web Service是一项非常复杂的工作 同样调用这个Web Service也十分麻烦 由于Visual Studio Net对Web Service提供了较强的支持 很多细致 烦杂的工作都由Visual Studio Net自动完成了 这样就使得上述工作变得非常简单 甚至不了解Web Service和其相关的标准 协议 也可以使用Visual Studio Net编写Web Service 并使用这个Web Service 下面就来用Visual Basic Net实现一个Web Service 此Web Service和数据库相关 数据库类型选用的是Sql Server 此Web Service提供了二个函数功能调用 其一名称为Binding 用以实现数据绑定 其二名称为Update 用以更新数据库中的数据

 以下就是Visual Basic Net实现此Web Service的具体步骤

  启动Visual Studio Net

  选择菜单「文件」|「新建」|「项目」后 弹出「新建项目」对话框

  将「项目类型」设置为「Visual Basic项目」

  将「模板」设置为「ASP NET Web 服务」

  在「位置」的文本框中输入//localhost/UpdateDataWebService 后 单击「确定」按钮 这样在Visual Studio Net就会计算机Internet信息服务的默认目录中创建一个名称为 UpdateDataWebService 文件夹 里面存放的是此项目的文件 具体如图 所示

 

 图 创建Web Service项目对话框

  选中「解决方案资源管理器」中的 Service a x 文件 单击鼠标右键 在弹出的菜单中选择「查看代码」 则进入Service a x vb的编辑界面

  在Service a x……vb的首部 在导入命名空间的代码区中添加下列代码 下列代码作用是导入命名空间System Data SqlClient

 Imports System Data SqlClient

  在Service a x……vb文件的 Public Class Service Inherits System Web Services WebService 代码后 添加下列代码 下列代码是在Web Service中定义二个功能调用

 <WebMethod ( ) > Public Function Binding ( ) As DataSet Dim con As New SqlConnection ( Server = localhost ; uid = sa ; pwd = ; database = northwind ) Dim daCust As New SqlDataAdapter ( Select From Customers con ) Dim ds As New DataSet ( ) daCust Fill( ds Cust ) Return dsEnd Function<WebMethod ( ) > Public Function Update ( ByVal ds As DataSet ) As DataSet Dim con As New SqlConnection ( Server = localhost ; uid = sa ; pwd = ; database = northwind ) Dim daCust As New SqlDataAdapter ( Select From Customers con ) Dim cbCust As New SqlCommandBuilder ( daCust ) daCust Update ( ds Cust ) Return dsEnd Function

  保存上述的修改 一个简单的操作Sql Server数据库的Web Service就完成了 此时单击快捷键F 此Web Service就开始运行 并可以对外提供服务了 具体如图 所示:

 

 图 :Web Service提供服务是的界面

 Service a x vb的代码清单如下:

 Imports System Web ServicesImports System Data SqlClient<WebService ( Namespace := ) > _Public Class Service Inherits System Web Services WebService<WebMethod ( ) > Public Function Binding ( ) As DataSet Modify this Connection string to use your SQL Server and log onDim con As New SqlConnection ( Server=localhost;uid=sa;pwd=;database=northwind ) Dim daCust As New SqlDataAdapter ( Select From Customers con ) Dim ds As New DataSet ( ) daCust Fill ( ds Cust ) Return dsEnd Function<WebMethod ( ) > Public Function Update ( ByVal ds As DataSet ) As DataSet Dim con As New SqlConnection ( Server=localhost;uid=sa;pwd=;database=northwind ) Dim daCust As New SqlDataAdapter ( Select From Customers con ) Dim cbCust As New SqlCommandBuilder ( daCust ) daCust Update ( ds Cust ) Return dsEnd Function#Region Web 服务设计器生成的代码 Public Sub New ( ) MyBase New ( )  该调用是 Web 服务设计器所必需的InitializeComponent ( )  在 InitializeComponent ( ) 调用之后添加您自己的初始化代码End Sub Web 服务设计器所必需的Private ponents As System ComponentModel IContainer  注意 以下过程是 Web 服务设计器所必需的  可以使用 Web 服务设计器修改此过程 不要使用代码编辑器修改它<System Diagnostics DebuggerStepThrough ( ) > Private Sub InitializeComponent ( ) ponents = New System ComponentModel Container ( )End SubProtected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean ) CODEGEN: 此过程是 Web 服务设计器所必需的 不要使用代码编辑器修改它 If disposing Then If Not ( ponents Is Nothing ) Then  ponents Dispose ( ) End IfEnd IfMyBase Dispose ( disposing )End Sub#End Region Web 服务示例 HelloWorld ( ) 示例服务返回字符串 Hello World 若要生成项目 请取消注释以下行 然后保存并生成项目 若要测试此 Web 服务 请确保 a x 文件为起始页 并按 F 键 <WebMethod ( ) > Public Function HelloWorld ( ) As String HelloWorld = Hello World End FunctionEnd Class

 下面就来介绍Visual Basic Net中使用这个Web Service提供的服务来更新数据库的实现方法

  五 在Visual Basic Net调用Web Service提供的服务:

 当Web Service已经处于对外提供服务状态 Visual Basic Net就可以通过HTTP 调用 来使用这些服务了 当然前提是要了解Web Service对外提供服务所对应的URL 当了解到Web Service对应的URL后 Visual Basic Net就像是使用本地的类库一样使用Web Service中提供的各种功能 所以有些人说 Web Service从实质上说 就是通过HTTP调用远程组件的一种方式 在Visual Basic Net具体实现加入Web Service可参阅下面步骤中的第七步

 在下面介绍的这个数据库应用程序是通过使用上面的Web Service中提供的 Binding 服务 对程序中DataGrid组件实现数据绑定 提供使用Web Service中提供的 Update 服务 通过程序中的DataGrid来修改数据库 下面就是Visual Basic Net中使用Web Service提供服务来编写数据库应用程序的具体步骤 :

  启动Visual Studio Net

  选择菜单文件|新建|项目后 弹出新建项目对话框

  将项目类型设置为Visual Basic项目

  将模板设置为Windows应用程序

  在名称文本框中输入TestWebService

  在位置的文本框中输入E:\VS NET项目 然后单击确定按钮 这样在 E:\VS NET项目 中就产生了名称为 TestWebService 文件夹 里面存放的就是TestWebService项目的所有文件

  选择解决方案资源管理器|引用后 单击鼠标右键 在弹出的菜单中选择添加Web 引用 在弹出的添加Web引用对话框中的地址文本框中输入 后 单击回车键后 可得图 所示界面 单击图 中添加引用按钮 则在TestWebService项目中加入了Web引用 请注意 就是上面完成的Web Service对外提供服务的URL地址 具体可参阅图 所示:

 

 图 :在TestWebService添加Web Service提供的服务

  从工具箱中的Windows窗体组件选项卡中往Form 窗体中拖入下列组件 并执行相应的操作:

 一个DataGrid组件

 二个Button组件 分别是Button 至Button 并在这二个Button组件拖入Form 的设计窗体后 分别双击它们 则系统会在Form vb文件分别产生这二个组件的Click事件对应的处理代码

按照表 所示调整窗体中各组件属性的数值

  组件类型 组件名称 属性 设置结果 Form Form Text 测试Web Service Form MaximizeBox False Form FormBorderStyle FixedSingle Button Button Text 绑定 Button FlatStyle Flat Button Text 修改 Button FlatStyle Flat

 表 :TestWebService项目中组件的主要属性及其对应数值

 在调整完组件属性值后 再按照图 所示调整组件的位置和排列顺序:

 

 图 :TestWebService项目中组件排列位置和顺序

  把Visual Studio Net的当前窗口切换到Form vb的代码编辑窗口 并用下列代码替换Form vb中的Button 的Click事件对应的处理代码 下列代码功能是使用Web Service中提供的 Binding 服务对DataGrid组件实现数据绑定:

 Private Sub Button _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles Button Click Dim MyService As New localhost Service ( ) DataGrid DataSource = MyService Binding ( ) DataGrid DataMember = Cust End Sub

  用下列代码替换Form vb中的Button 的Click事件对应的处理代码 下列代码功能是使用Web Service中提供的 Update 服务实现通过DataGrid来修改数据库数据:

 Private Sub Button _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles Button Click Dim MyService As New localhost Service ( ) Dim ds As DataSet = DataGrid DataSource Dim dsChanges As DataSet = ds GetChanges ( ) If Not ( dsChanges Is Nothing ) Then  ds Merge ( MyService Update ( dsChanges ) True ) End IfEnd Sub

  至此 TestWebService项目的全部工作就完成了 调用Web Service是不是很简单 此时单击快捷键F 运行程序后 单击程序中的绑定按钮就会对程序中的DataGrid组件实现数据绑定 单击程序中的修改按钮 则程序会根据DataGrid中的内容来更新数据库 图 就是TestWebService的运行界面:

 

 图 :TestWebService的运行界面

  Form vb的代码清单如下:

 Public Class Form Inherits System Windows Forms Form#Region Windows 窗体设计器生成的代码 Public Sub New ( ) MyBase New ( )  该调用是 Windows 窗体设计器所必需的InitializeComponent ( )  在 InitializeComponent ( ) 调用之后添加任何初始化End Sub 窗体重写处置以清理组件列表 Protected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean ) If disposing Then  If Not ( ponents Is Nothing ) Then   ponents Dispose ( )  End If End If MyBase Dispose ( disposing )End Sub Windows 窗体设计器所必需的Private ponents As System ComponentModel IContainer  注意 以下过程是 Windows 窗体设计器所必需的  可以使用 Windows 窗体设计器修改此过程 不要使用代码编辑器修改它Friend WithEvents Button As System Windows Forms Button Friend WithEvents Button As System Windows Forms Button Friend WithEvents DataGrid As System Windows Forms DataGrid <System Diagnostics DebuggerStepThrough ( ) > Private Sub InitializeComponent ( ) Me Button = New System Windows Forms Button ( ) Me Button = New System Windows Forms Button ( ) Me DataGrid = New System Windows Forms DataGrid ( ) CType ( Me DataGrid System ComponentModel ISupportInitialize ) BeginInit ( ) Me SuspendLayout ( ) Me Button FlatStyle = System Windows Forms FlatStyle Flat Me Button Location = New System Drawing Point ( ) Me Button Name = ButtonMe Button Size = New System Drawing Size ( ) Me Button TabIndex =Me Button Text = 绑定Me Button FlatStyle = System Windows Forms FlatStyle Flat Me Button Location = New System Drawing Point ( ) Me Button Name = ButtonMe Button Size = New System Drawing Size ( ) Me Button TabIndex =Me Button Text = 修改Me DataGrid DataMember =Me DataGrid Dock = System Windows Forms DockStyle Top Me DataGrid HeaderForeColor = System Drawing SystemColors ControlText Me DataGrid Name = DataGridMe DataGrid Size = New System Drawing Size ( ) Me DataGrid TabIndex =Me AutoScaleBaseSize = New System Drawing Size ( ) Me ClientSize = New System Drawing Size ( ) Me Controls AddRange ( New System Windows Forms Control ( ) {Me DataGrid Me Button Me Button } ) Me Name = FormMe Text = 测试Web ServiceCType ( Me DataGrid System ComponentModel ISupportInitialize ) EndInit ( ) Me ResumeLayout ( False )End Sub#End RegionPrivate Sub Button _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles Button Click Dim MyService As New localhost Service ( ) DataGrid DataSource = MyService Binding ( ) DataGrid DataMember = Cust End SubPrivate Sub Button _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles Button Click Dim MyService As New localhost Service ( ) Dim ds As DataSet = DataGrid DataSource Dim dsChanges As DataSet = ds GetChanges ( ) If Not ( dsChanges Is Nothing ) Then  ds Merge ( MyService Update ( dsChanges ) True ) End IfEnd SubEnd Class

  六 总结

lishixinzhi/Article/program/net/201311/11839

单击VI前面板或程序框图上的工具,选择Web发布工具,显示图1所示对话框,该对话框类似于向导程序,指导用户创建HTML文件和嵌入式VI前面板图像。

在VI名称中选择要发布的VI,通过点击下拉框>>浏览选择,当需要发布的VI已经打开时,则可以直接选择该VI。 在查看模式中选择客户端进程访问VI前面板的不同效果,有以下几个选项。

 嵌入-嵌入VI的前面板,客户端可通过浏览器进程查看和控制前面板。注意VI必须在服务器计算机的内存中,也就是必须在本机上打开VI,客户端才能查看和控制前面板。

 快照-客户端可以在浏览器中查看前面板的静态图像,但不能控制前面板。

 显示器-客户端可以在浏览器中查看前面板连续更新的动画快照,但不能控制前面板。

在预览框中预览将要生成的Web页。如果点击了在浏览器中预览,则可以在本地默认浏览器上浏览Web页。注:如果LabVIEW Web服务器未运行,则该选项会被禁用。另外,本机必须启动Web服务器后,客户端才可以查看和控制VI。以上三部分在Web发布工具对话框的每个页面上都出现。点击下一步

在选择HTML输出中,可以对客户端访问的Web页内容作迚一步的设置。

 文档标题-设置作为Web页标题的文本。

 页眉-设置在前面板图像上方显示的文本。

 页脚-设置在前面板图像下方显示的文本。点击下一步

在保存新Web页中,对Web页的保存迚行设置。

 Web页的保存目录-创建HTML文件的文件夹,通常为Windows的LabVIEW\www目录。

 文件名-HTML文件的文件名。

 URL-文档的网络地址。该URL可供网络浏览器访问。

点击保存至磁盘

点击连接后,就可以在本地默认浏览器上访问该Web页。也可以将该URL复制,在客户端的浏览器上访问该Web页。

生成webservice客户端的解决办法 JDK自带wsimport命令 wsimport命令在JDK16及以上版本中自带该工具,所以如果想使用本方式须安装JDK16及其以上的版本。 打开cmd命令窗口,快捷方式为window+r组合键。打开cmd窗口后,通过wsimport命令生成webs

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何用go创建一个webservice

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情