当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 关于C#下写的Web Service 服务在Delphi下调用时的问题

ASP.NET
asp.net下用服务器端代码解决浏览器兼容性问题
asp.net 安全的截取指定长度的html或者ubb字符串
asp.net 在线编辑word文档 可保存到服务器
asp.net 提高网站速度及如何利用缓存
asp.net 修改/删除站内目录操作后Session丢失问题
asp.net URL重写简化版 速学URL重写
asp.net EncryptHelper 加密帮助类
asp.net JSONHelper JSON帮助类
C# 调用存储过程简单完整的实例代码
vs2008 安装失败的总结与分享
HttpHandler HttpModule入门篇
ASP.NET(AJAX+JSON)实现对象调用
Asp.net 基于Cookie简易的权限判断
asp.net通过HttpModule自动在Url地址上添加参数
asp.net 字符串、二进制、编码数组转换函数
ASP.NET操作Excel备忘录
记录游客页面访问IP的简易实现代码 (asp.net+txt)
比较简单的将数据信息导入wrod文档方案(C# for word)
增加asp.net应用程序性能的20种方法(简单有效)
ASP.NET 图片防盗链的实现原理分析

ASP.NET 中的 关于C#下写的Web Service 服务在Delphi下调用时的问题


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 42 ::
收藏到网摘: n/a

       首先我觉得有必要把.net平台下开发webservice进行一个比较全面的阐述,web service的最初产生是在电子商务的环境下出现的,有些问题通过传统的手段已经不容易解决,比如在应用程序之间进行商务通信、数据交换,使用DCom、CORBA等二进制机制的东西已经行不通了,姑且不说他们受各自平台的限制,比如DCom(Distribute Common Objects Model)只能在Windows平台下进行,而CORBA(Common Objects Request Broker Architecture)又只是Java平台下的产物。他们要实现应用程序之间的数据通信是比较困难的。

        在这种背景下,Web Services 应运而生,它很好的解决了跨语言、跨平台以及良好而安全的穿透企业防火墙。它的体系结构大体上分为五个层次:

HTTP(HyperText Transfer Protocol)信道下进行数据通信
XML(Extensable Markup Language)数据表达形式
SOAP(Simple Objects Access Protocol)的数据封装
WSDL(WebServices Description Language)的描述语言格式
UDDI(Universal Description and Discovery Integration) 统一的描述、发现和集成
        作为它的优点跨语言、跨平台以及良好而安全的穿透企业防火墙已经足以使我们感到兴奋了。不过它也存在需要改善的地方,比如:

HTTP进行数据通信存在速度较慢的情况,尤其是第一次联结。
需要一台Web Server这一额外的开销
      说了WebServices的体系结构以及其优点缺点以后我们切入正题,那就是我们这次讨论的话题:

      Web Service 服务在Delphi下调用时的问题

     闲话少说,我们用一个检验WebMethod的Attribute的一个简单的例子进行阐述:它是完成一次从客户A转帐到B的一个简单商务过程。

     首先我们在.NET FrameWork1.1下创建一个WebService,这时候.net会帮我们自动创建一个Web应用

     我们需要创建一个类AttributeTest,它是在命名空间NameSpace AttributeTesting下的,那么这个类它将自动继承了它的基类 System.Web.Services.WebService,需要支出的时,我们可以对这个Web应用类设置其WebServiceAttribute,其中基本属性包括Description 和NameSpace

[WebServiceAttribute(Namespace="http://www.isdoo.com/services",

                                       Description="Hello Ansel,This is a testing Web Service!")]

public class AttributeTest : System.Web.Services.WebService
 {

  [WebMethodAttribute(Description="描述信息:继承了Count方法,并且对名称进行重载。执行的是把钱从A用户转帐到B用户......",
       //MessageName="Changing MessageName",
       BufferResponse=true,
       CacheDuration=1000,
       EnableSession=true,                  
       TransactionOption=TransactionOption.RequiresNew)]
  public string transMoney(double Money)
  {  
   try
   {   
    ContextUtil.EnableCommit();//Transaction only used to Database operation!
    MoneyInToA(Money);
    MoneyOutFromB(Money);
    ContextUtil.SetComplete();
    return "Transaction Successful,total "+Money.ToString();
   }
   catch( Exception e)
   {
    ContextUtil.SetAbort();
    return "Transaction failed! \n\r "+e.Message;
   }  
  }
  private void MoneyInToA(double Money)
  {
      SqlCommand sqlCom = new SqlCommand("update budget set Money=Money+"+Money.ToString()+" where Name='A'");
   databaseAccess myDatabase = new databaseAccess();
   sqlCom.Connection=myDatabase.getConnection();
   sqlCom.Connection.Open();