第二步:将webserivce的WSDL导入到该dll工程中,如何导,方法至少有两种,我说简单的一种: 

file->new->other->WebService->WSDL Importer,(将C#的WSDL输入)然后delphi会自动给你生成了一个pas文件,

(比如我们当前例子的服务地址是:http://localhost/AttributeTesting/AttributeTesting.asmx

如果你想输入WSDL那么就是http://localhost/AttributeTesting/AttributeTesting.asmx?wsdl

function GetServiceSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): ServiceSoap; 
const 
defWSDL = ’http://localhost/webserver/Service.asmx?WSDL’; 
defURL = ’http://localhost/webserver/Service.asmx’; 
defSvc = ’Service’; 
defPrt = ’ServiceSoap’; 
var 
RIO: THTTPRIO; 
begin 
Result := nil; 
if (Addr = ’’) then 
begin 
if UseWSDL then 
Addr := defWSDL 
else 
Addr := defURL; 
end; 
if HTTPRIO = nil then 
RIO := THTTPRIO.Create(nil) 
else 
RIO := HTTPRIO; 
try 
//RIO.HTTPWebNode.UseUTF8InHeader:=True; //

在此添加一句,修改编码方案。 
Result := (RIO as ServiceSoap); 
if UseWSDL then 
begin 
RIO.WSDLLocation := Addr; 
RIO.Service := defSvc; 
RIO.Port := defPrt; 
end else 
RIO.URL := Addr;

RIO.HTTPWebNode.UseUTF8InHeader:=True;//如果出现乱码对于中文参数必须加上 
finally 
if (Result = nil) and (HTTPRIO = nil) then 
RIO.Free; 
end; 
end;

initialization 
InvRegistry.RegisterInterface(TypeInfo(ServiceSoap), ’http://localhost/webserver/’, ’utf-8’);

InvRegistry.RegisterDefaultSOAPAction(TypeInfo(ServiceSoap), ’http://localhost/webserver/%operationName%’); 
//对于无法识别传入的参数的问题,需要手工加上下面这一句>...... 
InvRegistry.RegisterInvokeOptions(TypeInfo(ServiceSoap), ioDocument);

3.使用delphi调用上面的dll 
就一个函数,没有什么好说的: 
procedure TForm1.Button1Click(Sender: TObject); 
type 
GetNumTotal=function(a,b:integer):integer;stdcall; 
var 
Th:Thandle; 
Tf:GetNumTotal; 
Tp:TFarProc; 
begin 
Th:=LoadLibrary(’mywebservice.dll’); {装载DLL} 
if Th>0 then 
try 
Tp:=GetProcAddress(Th,PChar(’GetNum’)); 
if Tp<>nil 
then begin 
Tf:=GetNumTotal(Tp); 
Edit1.Text:=IntToStr(Tf(1,3)); {调用GetNumTotal函数} 
end 
else 
ShowMessage(’GetNumTotal函数没有找到’); 
finally 
FreeLibrary(Th); {释放DLL} 
end 
else 
ShowMessage(’mywebservice.dll没有找到’); 
end;

public static extern int GetNum(int a, int b); 
private void button1_Click(object sender, EventArgs e) 

int a,b,i; 
a=10; 
b =20; 
i=GetNum(a,b); //第一次比较慢(webserivce的唯一弊端!!!!) 
textBox1.Text = i.ToString(); 
}

教程-Delphi调用C# WEBSERVICE(二)的更多相关文章

  1. 教程-Delphi 调用控制面板设置功能

    应用程序运行时,有时需要对系统环境有特殊要求.例如,在Delphi数据库应用程序中可能需要进行BDE(Borland Database Engine)或ODBC数据源名称(DSN:Data Sourc ...

  2. 教程-Delphi调用百度地图API(XE8+WIN7)

    unit U_map; interface //---------------------------------------------------// //----------COPY BY 无言 ...

  3. 【转】Delphi调用webservice总结

    原文:http://www.cnblogs.com/zhangzhifeng/archive/2013/08/15/3259084.html Delphi调用C#写的webservice 用delph ...

  4. Delphi调用webservice总结

    Delphi调用webservice总结     Delphi调用C#写的webservice 用delphi的THTTPRIO控件调用了c#写的webservice. 下面是我调试时遇到的一些问题: ...

  5. delphi调用java编写的webservice

    delphi调用java编写的webservice JAVApojo: public class GroupInfo implements Serializable{    private stati ...

  6. delphi 调用Webservice 引入wsdl 报错 document empty

    delphi 调用Webservice 引入wsdl 报错 document empty 直接引入wsdl 地址报错 document empty 解决办法:在浏览器里保存为xml文件,然后在开发环境 ...

  7. Delphi调用JAVA的WebService上传XML文件(XE10.2+WIN764)

    相关资料:1.http://blog.csdn.net/luojianfeng/article/details/512198902.http://blog.csdn.net/avsuper/artic ...

  8. Delphi 读取 c# webservice XML的base64编码图片字符串转化图片并显示

    Delphi 读取 c# webservice XML的base64编码图片字符串转化图片并显示 在 开发中遇到应用c#及asp.net的在的webservice 保存图片并以xml文件形式现实出来 ...

  9. java获取https网站证书,附带调用https:webservice接口

    一.java 获取https网站证书: 1.创建一个java工程,新建InstallCert类,将以下代码复制进去 package com; import java.io.BufferedReader ...

随机推荐

  1. linux下修改IP信息

    在Linux的系统下如何才能修改IP信息 以前总是用ifconfig修改,重启后总是得重做.如果修改配置文件,就不用那么麻烦了- A.修改ip地址 即时生效: # ifconfig eth0 192. ...

  2. 增加字体和颜色样式-------CSS

    通过使用CSS,控制文本的字体,风格和颜色 1.基本操作: body{ font-family: Verdana, Geneva, Tahoma, sans-serif } body{ font-si ...

  3. css3创建动画

    @keyframes ico{ 0% { top: -100%; } 100%{ top:4%; } } @-webkit-keyframes ico{ 0% { top: -100%; } 100% ...

  4. ZOJ 2110 Tempter of the Bone(DFS)

    点我看题目 题意 : 一个N×M的迷宫,D是门的位置,门会在第T秒开启,而开启时间小于1秒,问能否在T秒的时候到达门的位置,如果能输出YES,否则NO. 思路 :DFS一下就可以,不过要注意下一终止条 ...

  5. Spring3 +mybatis3 之 MapperScannerConfigurer

    之前一直使用"org.mybatis.spring.mapper.MapperFactoryBean"这个类在spring中配置mybatis的dao接口,后来发现如果dao太多话 ...

  6. HDOJ多校联合第六场

    先一道一道题慢慢补上, 1009.题意,一棵N(N<=50000)个节点的树,每个节点上有一个字母值,给定一个串S0(|S0| <=30),q个询问,(q<=50000),每次询问经 ...

  7. use-a, has-a, is-a和实现关系

    use-a关系 如果类A与类B是 use-a 关系,则A具有类型为B.B&.const B&.B*.const B*的一个成员,或者是可以轻易以上述对象之一 返回一个B的函数.于是A可 ...

  8. QT中的字符串处理函数

    Fn 1 : arg 这个函数的具体声明不写了,它有20个重载,典型的示例代码如下: 1: #include <QtCore/QCoreApplication> 2: #include & ...

  9. Android 自定义对话框(Dialog)位置,大小

    代码: package angel.devil; import android.app.Activity; import android.app.Dialog; import android.os.B ...

  10. VC多文档编程技巧(取消一开始时打开的空白文档)

    VC多文档编程技巧(取消一开始时打开的空白文档) http://blog.csdn.net/crazyvoice/article/details/6185461 VC多文档编程技巧(取消一开始时打开的 ...