vb通过C#写的DLL实现与Java的WebService服务通讯(.net framework 4.0)
2013-08-02 00:04
519 查看
一、VB调用webservice常用方法:
需要安装SoapToolkit30.EXE,并在工程中引用Microsoft Soap Type Library v3.0
Private Sub CallWebService()
Dim m_spClient As New SoapClient30 'SoapClient30对象实例化
m_spClient.MSSoapInit "http://localhost/MCISWebService/vbtest.asmx?WSDL" '引用webservice
MsgBox m_spClient.ReceiveWeightRecord(text,pic1(),pic2()) '调用webservice方法,具体的参数内容省略
End Sub
这个是最常用的方法,C#和Java建立WebService服务做测试。
1、通过C#写了个WebService服务,服务内包含一个调用函数:
string receiveOtherWeightRecord(string weightString, byte[] uploadPicByte1, byte[] uploadPicByte2);
如果正常则WebService服务返回正常的提示信息。
VB通过该常用方法,初始化正常,并且可以正常发送数据和返回数据,OK没问题。
2、通过Java写了个WebService服务,服务内容同样包含上面一个函数。
VB通过该常用方法,初始化正常,但是不能正常发送数据和返回数据,提示错误为:
本人暂时还没有试成功,也希望热心朋友能给个建议!
二、C#调用WebService方法
1、鉴于VB调用Java写的WebService服务不能发送成功,没办法,然后我用C#写了一个客户端程序调用Java的WebService服务。很顺利的就连接并且发送成功!这里我不禁要怀疑微软提供的Microsoft Soap Type Library v3.0是否存在问题?
2、主要原项目是以前VB写的老程序,否则直接就用C#写啦!
三、C#写个连接和发送数据的DLL,供VB调用。
1、用C#新建一个项目,同时引用Java写的WebService服务。如下图所示:
2、如果生成的DLL能被VB调用,则需要进行如下修改:
(1)AssemblyInfo.cs文件的[assembly: ComVisible(true)]。如下图所示:
(2)右击WebServiceDLL属性,在“生成”栏输出项中,勾选“为COM互操作注册”的选择框。如下图所示:
(3)此时生成的DLL会报错,报错内容大致为:
成功注册了类型,类型库导出程序在处理“WebServiceDLL.ServiceReferenceWB.PreOtherWeightRecordServiceClient, WebServiceDLL”时发出警告。警告: 类型库导出程序遇到从泛型类派生并且未标记为 [ClassInterface(ClassInterfaceType.None)] 的类型。无法公开这种类型的类接口。请考虑用 [ClassInterface(ClassInterfaceType.None)] 标记该类型,并使用 ComDefaultInterface 特性向 COM 公开某个显式接口作为默认接口。成功注册了导出到“C:\MT\Project\2013\2013-07\WebService\WebServiceVB_Test\WebServiceDLL.tlb”的程序集和类型库...
比较关键的一步,在“解决方案资源管理器”点击“显示所有文件”,打开“Reference.cs”文件的PreOtherWeightRecordServiceClient函数前添加“[ClassInterface(ClassInterfaceType.None)]”标签。如下图所示:
(4)“生成”解决方案,此时将会生成WebServiceDLL.dll等文件,如下图所示:
(5)Windows7系统以管理员权限打开“Visual Studio命令提示(2010)”命令输入窗体,输入“regasm WebServiceDLL.dll /tlb: WebServiceDLL.tlb”,讲会提示注册成功的信息,如下图所示:
注意:如果是.Net FrameWork 2.0,则还可以用:
将生成的DLL及tlb注册(开始-->运行-->cmd):
%WINdir%\Microsoft.NET\Framework\v2.0.50727\regasm.exe activex.dll /tlb:activex.tlb /codebase >>c:\my.txt
完成后会在C盘下出现my.txt的log文件。
主要处理操作系统没有安装“Visual Studio命令提示(2010)”的问题。
(6)VB直接引用的是WebServiceDLL.tlb文件,如下图所示:
(7)VB可以直接New到WebService类,并调用公共方法,如下:
Dim objWebServiceDLL As WebServiceManager
Set objWebServiceDLL = New WebServiceManager
msgbox objWebServiceDLL.ConnectWebService("Test", txtURL.Text)
Set objWebServiceDLL = nothing
(8)结果发现程序报错,如下:
(9)比较关键的一步,C#下的app.config文件拷贝到vb程序的目录下,并且需要将app.config文件更改为VB程序编译后文件名同名的.config文件。如下图所示:
注意:如果是.Net FrameWork 2.0,则不需要将同文件名的.config文件。
(10)必须编译好了之后才能与WebService进行通讯,否则用VB源代码连接时,程序会报错,如下图所示:
3、VB编译后调用C#的Dll与Java写的WebService通讯程序就可以实现了。
四、参考文献
1、http://blog.163.com/jackie_dai@126/blog/static/34830764201181524125/
2、http://developer.51cto.com/art/200908/144594.htm
3、http://www.sufeinet.com/thread-1685-1-1.html
需要安装SoapToolkit30.EXE,并在工程中引用Microsoft Soap Type Library v3.0
Private Sub CallWebService()
Dim m_spClient As New SoapClient30 'SoapClient30对象实例化
m_spClient.MSSoapInit "http://localhost/MCISWebService/vbtest.asmx?WSDL" '引用webservice
MsgBox m_spClient.ReceiveWeightRecord(text,pic1(),pic2()) '调用webservice方法,具体的参数内容省略
End Sub
这个是最常用的方法,C#和Java建立WebService服务做测试。
1、通过C#写了个WebService服务,服务内包含一个调用函数:
string receiveOtherWeightRecord(string weightString, byte[] uploadPicByte1, byte[] uploadPicByte2);
如果正常则WebService服务返回正常的提示信息。
VB通过该常用方法,初始化正常,并且可以正常发送数据和返回数据,OK没问题。
2、通过Java写了个WebService服务,服务内容同样包含上面一个函数。
VB通过该常用方法,初始化正常,但是不能正常发送数据和返回数据,提示错误为:
本人暂时还没有试成功,也希望热心朋友能给个建议!
二、C#调用WebService方法
1、鉴于VB调用Java写的WebService服务不能发送成功,没办法,然后我用C#写了一个客户端程序调用Java的WebService服务。很顺利的就连接并且发送成功!这里我不禁要怀疑微软提供的Microsoft Soap Type Library v3.0是否存在问题?
2、主要原项目是以前VB写的老程序,否则直接就用C#写啦!
三、C#写个连接和发送数据的DLL,供VB调用。
1、用C#新建一个项目,同时引用Java写的WebService服务。如下图所示:
2、如果生成的DLL能被VB调用,则需要进行如下修改:
(1)AssemblyInfo.cs文件的[assembly: ComVisible(true)]。如下图所示:
(2)右击WebServiceDLL属性,在“生成”栏输出项中,勾选“为COM互操作注册”的选择框。如下图所示:
(3)此时生成的DLL会报错,报错内容大致为:
成功注册了类型,类型库导出程序在处理“WebServiceDLL.ServiceReferenceWB.PreOtherWeightRecordServiceClient, WebServiceDLL”时发出警告。警告: 类型库导出程序遇到从泛型类派生并且未标记为 [ClassInterface(ClassInterfaceType.None)] 的类型。无法公开这种类型的类接口。请考虑用 [ClassInterface(ClassInterfaceType.None)] 标记该类型,并使用 ComDefaultInterface 特性向 COM 公开某个显式接口作为默认接口。成功注册了导出到“C:\MT\Project\2013\2013-07\WebService\WebServiceVB_Test\WebServiceDLL.tlb”的程序集和类型库...
比较关键的一步,在“解决方案资源管理器”点击“显示所有文件”,打开“Reference.cs”文件的PreOtherWeightRecordServiceClient函数前添加“[ClassInterface(ClassInterfaceType.None)]”标签。如下图所示:
(4)“生成”解决方案,此时将会生成WebServiceDLL.dll等文件,如下图所示:
(5)Windows7系统以管理员权限打开“Visual Studio命令提示(2010)”命令输入窗体,输入“regasm WebServiceDLL.dll /tlb: WebServiceDLL.tlb”,讲会提示注册成功的信息,如下图所示:
注意:如果是.Net FrameWork 2.0,则还可以用:
将生成的DLL及tlb注册(开始-->运行-->cmd):
%WINdir%\Microsoft.NET\Framework\v2.0.50727\regasm.exe activex.dll /tlb:activex.tlb /codebase >>c:\my.txt
完成后会在C盘下出现my.txt的log文件。
主要处理操作系统没有安装“Visual Studio命令提示(2010)”的问题。
(6)VB直接引用的是WebServiceDLL.tlb文件,如下图所示:
(7)VB可以直接New到WebService类,并调用公共方法,如下:
Dim objWebServiceDLL As WebServiceManager
Set objWebServiceDLL = New WebServiceManager
msgbox objWebServiceDLL.ConnectWebService("Test", txtURL.Text)
Set objWebServiceDLL = nothing
(8)结果发现程序报错,如下:
(9)比较关键的一步,C#下的app.config文件拷贝到vb程序的目录下,并且需要将app.config文件更改为VB程序编译后文件名同名的.config文件。如下图所示:
注意:如果是.Net FrameWork 2.0,则不需要将同文件名的.config文件。
(10)必须编译好了之后才能与WebService进行通讯,否则用VB源代码连接时,程序会报错,如下图所示:
3、VB编译后调用C#的Dll与Java写的WebService通讯程序就可以实现了。
四、参考文献
1、http://blog.163.com/jackie_dai@126/blog/static/34830764201181524125/
2、http://developer.51cto.com/art/200908/144594.htm
3、http://www.sufeinet.com/thread-1685-1-1.html
相关文章推荐
- 通过COM组件方式实现java调用C#写的DLL文件
- Java实现调用c# WebService服务
- OMRON欧姆龙PLC与VB、C#通过以太网(FinsTCP/FinsUDP)、串口(FinsCom/HostLink)、DTU通讯的DLL
- 在c#中通过http对象编程实现webservice调用
- 运用C#编程通过OPC方式实现PC机与西门子PLC通讯-同步通讯篇
- (转)C#与Android通过adb实现usb通讯
- 通过COM组件方式实现java调用C#写的DLL文件
- 巧用C#做中间语言 实现Java调用.net DLL的方法
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分
- C# 通过Reflection代码实现载入内置的(dll)资源文件
- .Net/C#/VB/T-SQL/Java 实现: 将天文数字转换成中文大写 (2000 年前的思路,打劫的,一点儿技术含量都没有)
- 上位机通过c#调用MX component实现与三菱PLC通讯。附源代码
- Java创建WebService服务及客户端实现(转)
- Java创建WebService服务及客户端实现
- [转]在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(二)
- WebService(XFire)开发服务器端用java实现,客户端由C#实现。
- Android Studio 通过JNA调用 Clang编译的so库,以及Java JNA 调用x64dll,C# dllimport调用x86dll
- 用C#通过反射实现动态调用WebService 告别Web引用
- 巧用C#做中间语言 实现Java调用.net DLL的方法
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分(来源:http://blog.csdn.net/yangjundeng/archive/2005/03/17/321920.aspx)