北方站长站
客服热线:0632-5117766

Oralce 调用Delphi写DLL去访问C# WebService的问题

[2007-11-28 00:00:00] 作者:Northz.com 来源:北方站长站

Tags:问题 访问 调用 AddNumber end 一个 int BINARY_INTEGER

  

CREATE OR REPLACE FUNCTION "MY"."ADD" (a in BINARY_INTEGER,bnTz北方站长站
in BINARY_INTEGER) RETURN BINARY_INTEGER ASnTz北方站长站
EXTERNAL LIBRARY MY_LIBnTz北方站长站
NAME "AddNumber"nTz北方站长站
LANGUAGE C;nTz北方站长站
2、写了一个过程AddTest如下:nTz北方站长站
CREATE OR REPLACE PROCEDURE "MY"."ADDTEST" (a innTz北方站长站
BINARY_INTEGER,b in BINARY_INTEGER)nTz北方站长站
asnTz北方站长站
retVal BINARY_INTEGER;nTz北方站长站
beginnTz北方站长站
retVal:=Add(a,b);nTz北方站长站
end;nTz北方站长站
3、创建了MY_LIB包:nTz北方站长站
CREATE OR REPLACE LIBRARY MY_LIB AS 'C:/oracle/ora92/bin/MyWebservice.dll';nTz北方站长站
4、在Delphi里创建了一个MyWebservice.dll,并拷贝其到$ORACLE_HOME$/BIN目录下,其中有一个方法:nTz北方站长站
interfacenTz北方站长站
function AddNumber(a:integer;b:integer):Integer;cdecl;nTz北方站长站
....nTz北方站长站
implementationnTz北方站长站
procedure DoGetWebServiceErr(ErrMsg:string);nTz北方站长站
varnTz北方站长站
logfile: TextFile;nTz北方站长站
i:integer;nTz北方站长站
beginnTz北方站长站
AssignFile(logFile,'d:/test.txt');nTz北方站长站
trynTz北方站长站
Rewrite(logFile); nTz北方站长站
Write(logFile,ErrMsg);nTz北方站长站
finallynTz北方站长站
CloseFile(logFile);nTz北方站长站
end;nTz北方站长站
end;nTz北方站长站
function AddNumber(a:integer;b:integer):Integer;nTz北方站长站
beginnTz北方站长站
trynTz北方站长站
Result := GetMyWebServiceSoap().AddNumber(a,b);nTz北方站长站
exceptnTz北方站长站
on E: Exception do DoGetWebServiceErr(E. E.Message);nTz北方站长站
elsenTz北方站长站
Result :=-1;nTz北方站长站
end;nTz北方站长站
end;nTz北方站长站
.....nTz北方站长站
其中:GetMyWebServiceSoap()是我用WSDL Importer导入生成的MyWebService.pas中的一个方法。nTz北方站长站
我在该Dll的项目文件里导出了该方法:nTz北方站长站
exportsnTz北方站长站
AddNumber;nTz北方站长站
5、用C#在Localhost创建了一个名为MyWebService的Web Service,其中有一个名为AddNumber的WEB方法,其定义如下:nTz北方站长站
[WebMethod]nTz北方站长站
public int AddNumber(int a,int b)nTz北方站长站
{nTz北方站长站
return a+b;nTz北方站长站
}nTz北方站长站
6、我用c#写了一个Windows Form客户端,通过调用上面用Delphi 写的dll,测试该Web方法,测试成功nTz北方站长站
[DllImport(DLLPath,EntryPoint = "MyWebservice.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]nTz北方站长站
private extern static int AddNumber(int a,int b);nTz北方站长站
......nTz北方站长站
///测试按钮nTz北方站长站
private void buttonTestWebService_Click(object sender, System.EventArgs e)nTz北方站长站
{nTz北方站长站
Consle.Write( AddNumber(1,2));nTz北方站长站
}nTz北方站长站
7、在SQL*Plus里测试失败,打开Test.txt文件内容为“尚未调用 CoInitialize”,测试代码如下nTz北方站长站
EXECUTE Addtest(1,1);nTz北方站长站
如果将Delphi中的AddNumber 修改为nTz北方站长站
function AddNumber(a:integer;b:integer):Integer;nTz北方站长站
beginnTz北方站长站
trynTz北方站长站
Result :=a+b;//不调用WebService,直接计算nTz北方站长站
exceptnTz北方站长站
on E: Exception do DoGetWebServiceErr(E. E.Message);nTz北方站长站
elsenTz北方站长站
Result :=-1;nTz北方站长站
end;nTz北方站长站
end;nTz北方站长站
执行则成功。nTz北方站长站
Oracle的Listener.ora和tnsnames.ora的配置如下nTz北方站长站
# LISTENER.ORA Network Configuration file: C:/oracle/ora92/network/admin/listener.oranTz北方站长站
# Generated by Oracle configuration tools.nTz北方站长站
MY_EXTPROC_LISTENER = nTz北方站长站
(ADDRESS_LIST = nTz北方站长站
(ADDRESS= (PROTOCOL=ipc)nTz北方站长站
(KEY = extproc)nTz北方站长站
)nTz北方站长站
)nTz北方站长站
SID_LIST_MY_EXTPROC_LISTENER = nTz北方站长站
(SID_LIST = nTz北方站长站
(SID_DESC = nTz北方站长站
(SID_NAME = extproc)nTz北方站长站
(ORACLE_HOME = C:/oracle/ora92)nTz北方站长站
(PROGRAM= C:/oracle/ora92/bin/extproc)nTz北方站长站
(ENVS="EXTPROC_DLLS=ANY")nTz北方站长站
)nTz北方站长站
)nTz北方站长站
# TNSNAMES.ORA Network Configuration file: C:/oracle/ora92/network/admin/tnsnames.oranTz北方站长站
# Generated by Oracle configuration tools.nTz北方站长站
EXTPROC_CONNECTION_DATA.WORLD =nTz北方站长站
(DESCRIPTION =nTz北方站长站
(ADDRESS = (PROTOCOL = IPC)(KEY = extproc))nTz北方站长站
(CONNECT_DATA =nTz北方站长站
(SID = extproc)nTz北方站长站
)nTz北方站长站
)nTz北方站长站

 

News

 

info

 

down

出售手机裁听器,手机跟踪定位系统    企业网站,网城,购物网,都市导购,校园网    网上书店系统    上海电信机房服务器托管,双线主机托管    美女图片馆    15G 高清晰图片资源 无水印    室内装潢材料新产品杰威尔艺术漆    收一万ip的美女图片    大量收购个人网址导航网站    出售网址站PR=4alexa=119,764    

下一篇链接:(delphi)程序运行过程中等待对话框的自定义组件源码(包含两个提示,进度条,AVI)

上一篇链接:关于C#下写的Web Service 服务在Delphi下调用时的问题

评论】 【打印】 【加入收藏】 【关闭→论坛 →博客 →数据中心

 共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面