• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Delphi操作webservice返回值为dataset的处理办法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在微软中国找到了一个官方的说法------不建议将DataSet直接作为返回值传送,因为里面含有大量复杂的schema以及更改等信息,大部分非.NET语言在解析上有困难。建议使用DataSet.WriteXML方法将简化后的XML版本作为一个WideString回传。经过试验,已经在Delphi下轻松通过,Delphi中还需要使用XML Mapper工具事先生成Transfomation(XTR)文件。

Delphi7客户端代码
----------------------------------------------------------------------------------------------------------------------------

unit WSTestMain; 

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, InvokeRegistry, StdCtrls, Rio, SOAPHTTPClient, Grids, DBGrids,
DB, DBClient, DBTables, Provider, xmldom, Xmlxform,XMLIntf,XMLDoc,SOAPConst;

type
TForm1
= class(TForm)
HTTPRIO1: THTTPRIO;
Button1: TButton;
Memo1: TMemo;
XMLTransformProvider1: TXMLTransformProvider;
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses WSTestDefine;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
A:Service1Soap;
B:WideString;
XMLDoc: IXMLDocument;
begin
A :
= HTTPRIO1 as Service1Soap;
B :
= A.GetPersonTable;
Memo1.Lines.Add( B );
ClientDataset1.Active :
= FALSE;
XMLDoc :
= NewXMLDocument;
XMLDoc.Encoding :
= SUTF8;
XMLDoc.LoadFromXML(B);
XMLTransformProvider1.TransformRead.SourceXmlDocument :
= XMLDoc.GetDOMDocument;
ClientDataset1.Active :
= TRUE;
end;

end.

  


---------------------------------------------------------------------------------------
.NET WebService代码
---------------------------------------------------------------------------------------

using System; 
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
using System.Data.OracleClient;
using System.IO;
namespace WS0622
{
/// <summary>
/// Service1 的摘要说明。
/// </summary>
public class Service1 : System.Web.Services.WebService
{
public Service1()
{
//CODEGEN: 该调用是 ASP.NET Web 服务设计器所必需的
InitializeComponent();
}

#region 组件设计器生成的代码

//Web 服务设计器所必需的
private IContainer components = null;

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{

}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if(disposing && components != null)
{
components.Dispose();
}
base.Dispose(disposing);
}

#endregion

// WEB 服务示例
// HelloWorld() 示例服务返回字符串 Hello World
// 若要生成,请取消注释下列行,然后保存并生成项目
// 若要测试此 Web 服务,请按 F5 键

[Serializable]
public class Person
{
public Person()
{
}

public Person(string name,string gender)
{
this.Name=name;
this.Gender=gender;
}

public string Name="";
public string Gender="";
}
[WebMethod(CacheDuration
=60)]
public Person[] GetPersons()
{
Person Alice
=new Person("Alice","Female");
Person Bob
=new Person("Bob","Male");
Person Chris
=new Person("Chris","Female");
Person Dennis
=new Person("Dennis","Male");

return new Person[]{Alice,Bob,Chris,Dennis};
}

[WebMethod]
public string GetPersonTable()
{
DataTable table
=new DataTable("Person");
table.Columns.Add(
"Name");
table.Columns.Add(
"Gender");
table.Rows.Add(
new string[2]{"Alice","Female"});
table.Rows.Add(
new string[2]{"Bob","Male"});
table.Rows.Add(
new string[2]{"Chris","Female"});
table.Rows.Add(
new string[2]{"Dennis","Male"});
table.Rows.Add(
new string[2]{"Eric","Male"});

DataSet dataset
=new DataSet("PersonTable");
dataset.Tables.Add(table);

System.Text.StringBuilder strbuilder
=new System.Text.StringBuilder();
StringWriter writer
=new StringWriter(strbuilder);
dataset.WriteXml(writer,System.Data.XmlWriteMode.IgnoreSchema);
return strbuilder.ToString();
}
}
}

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
FINDPEAKS - matlab函数发布时间:2022-07-18
下一篇:
MATLAB批量打印输出600PPI的图像且图像不留空白发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap