CREATE OR REPLACE FUNCTION "MY"."ADD" (a in BINARY_INTEGER,b
nTz北方站长站 in BINARY_INTEGER) RETURN BINARY_INTEGER AS
nTz北方站长站EXTERNAL LIBRARY MY_LIB
nTz北方站长站NAME "AddNumber"
nTz北方站长站LANGUAGE C;
nTz北方站长站2、写了一个过程AddTest如下:
nTz北方站长站CREATE OR REPLACE PROCEDURE "MY"."ADDTEST" (a in
nTz北方站长站 BINARY_INTEGER,b in BINARY_INTEGER)
nTz北方站长站as
nTz北方站长站 retVal BINARY_INTEGER;
nTz北方站长站begin
nTz北方站长站 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北方站长站interface
nTz北方站长站 function AddNumber(a:integer;b:integer):Integer;cdecl;
nTz北方站长站....
nTz北方站长站implementation
nTz北方站长站 procedure DoGetWebServiceErr(ErrMsg:string);
nTz北方站长站 var
nTz北方站长站 logfile: TextFile;
nTz北方站长站 i:integer;
nTz北方站长站 begin
nTz北方站长站 AssignFile(logFile,'d:/test.txt');
nTz北方站长站 try
nTz北方站长站 Rewrite(logFile);
nTz北方站长站 Write(logFile,ErrMsg);
nTz北方站长站 finally
nTz北方站长站 CloseFile(logFile);
nTz北方站长站 end;
nTz北方站长站 end;
nTz北方站长站 function AddNumber(a:integer;b:integer):Integer;
nTz北方站长站 begin
nTz北方站长站 try
nTz北方站长站 Result := GetMyWebServiceSoap().AddNumber(a,b);
nTz北方站长站 except
nTz北方站长站 on E: Exception do DoGetWebServiceErr(E. E.Message);
nTz北方站长站 else
nTz北方站长站 Result :=-1;
nTz北方站长站 end;
nTz北方站长站 end;
nTz北方站长站 .....
nTz北方站长站其中:GetMyWebServiceSoap()是我用WSDL Importer导入生成的MyWebService.pas中的一个方法。
nTz北方站长站我在该Dll的项目文件里导出了该方法:
nTz北方站长站exports
nTz北方站长站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北方站长站 begin
nTz北方站长站 try
nTz北方站长站 Result :=a+b;//不调用WebService,直接计算
nTz北方站长站 except
nTz北方站长站 on E: Exception do DoGetWebServiceErr(E. E.Message);
nTz北方站长站 else
nTz北方站长站 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.ora
nTz北方站长站# 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.ora
nTz北方站长站# 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北方站长站
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面