惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
雷峰网
雷峰网
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Spread Privacy
Spread Privacy
H
Hacker News: Front Page
PCI Perspectives
PCI Perspectives
Webroot Blog
Webroot Blog
罗磊的独立博客
H
Heimdal Security Blog
TaoSecurity Blog
TaoSecurity Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Google Online Security Blog
Google Online Security Blog
Last Week in AI
Last Week in AI
美团技术团队
Help Net Security
Help Net Security
The Hacker News
The Hacker News
C
Cisco Blogs
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
The Register - Security
The Register - Security
IT之家
IT之家
WordPress大学
WordPress大学
Jina AI
Jina AI
Recent Commits to openclaw:main
Recent Commits to openclaw:main
H
Help Net Security
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threat Research - Cisco Blogs
P
Proofpoint News Feed
NISL@THU
NISL@THU
爱范儿
爱范儿
The GitHub Blog
The GitHub Blog
Scott Helme
Scott Helme
V
Vulnerabilities – Threatpost
B
Blog
T
Tenable Blog
博客园 - 三生石上(FineUI控件)
T
The Exploit Database - CXSecurity.com
S
Security Affairs
小众软件
小众软件
Hacker News: Ask HN
Hacker News: Ask HN
Security Latest
Security Latest
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
W
WeLiveSecurity
A
Arctic Wolf
L
LINUX DO - 热门话题
Google DeepMind News
Google DeepMind News
M
MIT News - Artificial intelligence

博客园 - flyfish

Microsoft SQL Server 2005 -- 错误 29503。SQL Server 服务无法启动 模拟鼠标移动和左键单击 .C# 获取另一程序控件,改变值,触发事件 - flyfish - 博客园 ASPNET2.0中读写Cookie的方法! - flyfish - 博客园 转 跨域读取Cookie和session之HttpWebRequest另类方法(网站API开发) ASP.NET WAP开发 用ASP.NET创建移动Web窗体[转] ASP.NET 2.0移动开发入门之使用模拟器 [WAP]dotNet在WAP应用开发中实现按指定页数翻页的解决方案 SQL Server 自增字段归零等问题 ntext replace sql SQLServer2005数据库还原到SQLServer2000 如何去除Google搜索结果病毒提示 Tomcat 6 连接 MS SQL 2005 Windows 2003远程桌面连接数限制 如何用SQL命令修改字段名称 FCKeditor详细的设置 log4net 配置与应用 两个sql server 2000的通用分页存储过程
在ASP程序中调用Web Service
flyfish · 2009-07-22 · via 博客园 - flyfish

  微软投入了大量资金来推销其.NET的各种优点,其中.NET最大的优点之一就是微软始创的XML Web Services。XML Web Services可以将你的程序和以前定制的DLL和COM/DCOM组建分离(避免陷入DLL陷阱),然后将这些功能设计成为XML Web Services,让其他应用程序也可以访问和调用这些功能(比如:网站、分布式程序)(关于怎样在.NET中建立和使用XML Web Services,请参考这篇文章:http://aspnet.4guysfromrolla.com/articles/062602-1.aspx)。那么,当你考虑提升现有ASP程序性能的时候,怎样将其与已经开发的XML Web Services结合呢?

  本文的目的就是演示怎样将最新的XML Web Services和现有ASP程序结合起来。通过将一些具体的业务功能写成XML Web Services并且将这些XML Web Services与ASP程序完美结合,现有的ASP程序就可以象ASP.NET程序一样共同“分享”XML Web Services的好处了。当你需要提升现有ASP程序的性能并且和已经开发的ASP.NET同步,但是有没有时间和精力将这些程序完全修改为ASP.NET程序的时候,我们就可以考虑将ASP和XML Web Services结合使用。

  本文将要用到的例子是基于以下现实需要的:在B2B电子商务中,对于一些比较固定的客户,我们可能对他们有一些特殊的折扣。下文中我们将建立一Web Services,这个 Web Services的功能就是针对特殊的客户按照一定规则计算折扣,然后,我们将其与一个简单的ASP程序结合起来应用。

  数据库

  我们在这里使用微软Access中自带的NorthWind数据库,当然,我们不会照盘全收,我们需要对数据库的“Products”数据表表结构作一些小小的修改:增加一个保存商品实际价格的“CostPrice”字段(我们将填入一些随机数据)(这个数据库可以在这里下载到:http://www.4guysfromrolla.com/webtech/code/asptonet.zip)

  Web Service

  在文章“Creating and Consuming a Web Service”中已经讨论过,我们可以使用文本编辑器来建立Web Services,比如:WEB Matrix Projext或者VS.NET等工具。文中我们将试验使用VS.NET来建立Web Service。

  首先,在VS.NET中建立一个新的ASP.NET工程,然后,删除程序建立的Web Form,增加一个新的Web Service文件(命名为:eCommerce.asmx),在这个Web Service中,将默认的名字空间修改为ClassicASP_nDotNET.eCommerce,并且增加一个名为CalculateDiscountCompanyX的方法。

  WEB方法CalculateDiscountCompanyX是一个用于计算公司CompanyX折扣的简单函数(当然,更为健壮的解决方法是写一个通用的函数比如:CalculateDiscount(CompanyID),在这个函数中CompanyID专门用于定义特定的公司编号,然后,程序根据公司编号查找数据库得到具体的公司名称,并对其做出折扣计算。我们这里主要的目的在于演示XML Web Services和ASP程序的结合使用,因此,只用需要一些简单函数。)

  在我们的应用中,假设对公司CompanyX的最小折扣为10%,公司最低纯利润为7.5%,这些具体的折扣和利润都是固化写在程序中的。

  WEB方法CalculateDiscountCompanyX相当简单,将用到以下一些参数:

  1、UnitPrice:建议零售价格,数据类型为Double;

  2、CostPrice:商品的实际价格,也就是进货价格,数据类型为Double;

  3、AccessCode:该Web Services的安全密码,数据类型为String;

  如果函数计算出现错误,将返回-1,以下是函数源代码:

  <WebMethod()> _
  Public Function CalculateDiscountCompanyX(ByVal UnitPrice As Double, _
  ByVal CostPrice As Double, _
  ByVal AccessCode As String) As Double
  Dim dblDiscount As Double, _
  dblMarkup As Double, _
  dblMinMarkup As Double, _
  dblMinClientDiscount As Double

  dblMarkup = (1.3) '期望利润
  dblMinMarkup = (1.075) ' 最低利润

  ' 对客户的期望最低折扣
  dblMinClientDiscount = (0.1)

  Try
  If AccessCode = "p455w0rd" Then
  ' 根据利润计算折扣
  dblDiscount = FormatNumber(((UnitPrice - (CostPrice * dblMarkup))), 2)

  ' 检查折扣是否合适na
  If dblDiscount + 0 <= (UnitPrice * dblMinClientDiscount) Then
  dblDiscount = FormatNumber((UnitPrice * dblMinClientDiscount), 2)
  End If

  ' 检查是否有最低利润
  If (UnitPrice - dblDiscount) <= (CostPrice * dblMinMarkup) Then
  dblDiscount = FormatNumber((UnitPrice - (CostPrice * dblMinMarkup)), 2)
  End If

  Return dblDiscount
  Else
  Return -1 '密码错误
  End If
  Catch ex As Exception
  Return -1
  End Try
  End Function

  将Web Services和ASP程序结合起来

  为了使ASP和Web Services相互通讯变得相对简单,需要首先下载安装MS SOAP Toolkit 2.0(地址为:http://msdn.microsoft.com/SOAP/),这样,就可以使用SOAP来实现ASP和Web Services的通讯,这将使ASP程序和Web Services通讯与使用其他方法相比变得简单。事实上,在4Guys网站有一篇文章专门介绍SOAP的使用,这篇文章就是:Creating Web Services using ASP(地址:http://www.4guysfromrolla.com/webtech/070401-1.shtml)。

  这样,ASP页面就可以使用刚才我们建立的Web Service计算公司CompanyX的商品折扣,为了使程序看上去更加简单和条例,我们将SOAP调用从主程序移出来,专门写一个自己的函数:CalculateDiscount。由于使用了SOAP,所以这个函数调用Web Service比较简单,只有几行代码,程序代码如下:

  Public Function CalculateDiscount(UnitPrice, CostPrice)
  SET objSoapClient = Server.CreateObject("MSSOAP.SoapClient")
  objSoapClient.ClientProperty("ServerHTTPRequest") = True

  ' 下面的链接需要修改为我们具体网站的链接
  Call objSoapClient.mssoapinit("http://localhost/ClassicASP_n_DotNET/" & _
  "eCommerce.asmx?WSDL", "eCommerce")
  ' 使用SOAP对象调用Web Service函数
  CalculateDiscount = objSoapClient.CalculateDiscountCompanyX(UnitPrice, _
  CostPrice, "p455w0rd")
  End Function

  以上的程序相当的明了,首先mssoapinit方法用WSDL为调用Web Service作准备,然后真正计算折扣的函数CalculateDiscountCompanyX被调用,将折扣计算出来并且返回给函数CalculateDiscount。

  在我们提供的源代码下载包里面,意思的函数都可以在companyx_products.asp页面找到,ASP页面将遍历整个“Products”数据表,在现实每条记录的时候都将调用“CalculateDiscount”函数来计算公司CompanyX的折扣。

  结论

  文章介绍了怎样用ASP来和Web Service通讯,另外,我们可以知道,将一些功能模块设计成为Web Service可以让ASP象ASP.NET一样调用这些模块。