wsdl生成Webservice客户端和服务端C#代码
2013-04-21 10:17
274 查看
【整理,本文内容来源于网络及本人实践】
Webservice一般是先开发服务,发布wsdl后由客户端调用,但也有先有标准的wsdl文件,反过来开发服务的情况。为了保证开发的服务和wsdl一样,可以把往wsdl生成服务端代码,实现其中方法,再发布服务。
VS提供了一个命令,可以将wsdl生成服务端或客户端代码。打开:开始-所有程序-Microsoft Visual Studio2008-Visual Studio Tools-Visual Studio 2008命令提示
执行 wsdl /?,可以看到wsdl的说明,默认生成语言是CS,也可以设置VB、JS、CPP等;默认生成是客户端代码,也可生成服务端的抽象类或接口。
如wsdl d:\Hello.wsdl /server /out:d:\HelloServer.cs
生成Hello.wsdl服务端代码的抽象类,稍加修改并实现其中内容即可发布。
我遇到的问题
在开发过程中,我拿到的wsdl是由java用endpoint发布的,我重新生成C#服务端代码再发布服务,得到的wsdl比不完全一样
本以为也没什么事,然而java那边调用我的时候,说我的wsdl里<service>节点的<port>里没有name=HelloHttpSoap11EndPoint的端口。
我注意了一下,标准的wsdl里有HelloHttpSoap11EndPoint(soap11)、HelloHttpSoap12EndPoint(soap12)和HelloHttpEndPoint,而我的wsdl里只有HelloSoap11(soap11)和HelloSoap12(soap12)两个端口
对方说,他必须按照端口名称才能调用到服务,我也不太清楚他那边java是怎么调用的,总之我自己发布的wsdl和标准的不一样,我也没办法,弄了整整一天,终于把这个问题大致解决好了,对,是大致!
将WebServiceBindingAttribute的name改成HelloHttpSoap11EndPoint(或者添加一个WebServiceBindingAttribute)
然后在所有函数说明的SoapDocumentMethodAttribute中,添加Binding=“HelloHttpSoap11EndPoint”,把方法绑定到端口上去。
如果你把所有方法都Binding=“HelloHttpSoap11EndPoint”,那发布的wsdl里就只有HelloHttpSoap11EndPoint(soap11)和HelloHttpSoap11EndPoint1(soap12)两个端口,如果不是所有方法都Binding=“HelloHttpSoap11EndPoint”,那还会有原来的HelloSoap11和HelloSoap12端口
至此为止,我已经无能为力了,soap11的端口名称对了,soap12端口名称是自己生成的,和标准的还是不一样,到现在也不知道怎么改。总之现在我们都用soap1.1协议,所以暂时没有问题。期待高手帮忙解答。
Webservice一般是先开发服务,发布wsdl后由客户端调用,但也有先有标准的wsdl文件,反过来开发服务的情况。为了保证开发的服务和wsdl一样,可以把往wsdl生成服务端代码,实现其中方法,再发布服务。
VS提供了一个命令,可以将wsdl生成服务端或客户端代码。打开:开始-所有程序-Microsoft Visual Studio2008-Visual Studio Tools-Visual Studio 2008命令提示
执行 wsdl /?,可以看到wsdl的说明,默认生成语言是CS,也可以设置VB、JS、CPP等;默认生成是客户端代码,也可生成服务端的抽象类或接口。
如wsdl d:\Hello.wsdl /server /out:d:\HelloServer.cs
生成Hello.wsdl服务端代码的抽象类,稍加修改并实现其中内容即可发布。
我遇到的问题
在开发过程中,我拿到的wsdl是由java用endpoint发布的,我重新生成C#服务端代码再发布服务,得到的wsdl比不完全一样
本以为也没什么事,然而java那边调用我的时候,说我的wsdl里<service>节点的<port>里没有name=HelloHttpSoap11EndPoint的端口。
我注意了一下,标准的wsdl里有HelloHttpSoap11EndPoint(soap11)、HelloHttpSoap12EndPoint(soap12)和HelloHttpEndPoint,而我的wsdl里只有HelloSoap11(soap11)和HelloSoap12(soap12)两个端口
对方说,他必须按照端口名称才能调用到服务,我也不太清楚他那边java是怎么调用的,总之我自己发布的wsdl和标准的不一样,我也没办法,弄了整整一天,终于把这个问题大致解决好了,对,是大致!
将WebServiceBindingAttribute的name改成HelloHttpSoap11EndPoint(或者添加一个WebServiceBindingAttribute)
然后在所有函数说明的SoapDocumentMethodAttribute中,添加Binding=“HelloHttpSoap11EndPoint”,把方法绑定到端口上去。
如果你把所有方法都Binding=“HelloHttpSoap11EndPoint”,那发布的wsdl里就只有HelloHttpSoap11EndPoint(soap11)和HelloHttpSoap11EndPoint1(soap12)两个端口,如果不是所有方法都Binding=“HelloHttpSoap11EndPoint”,那还会有原来的HelloSoap11和HelloSoap12端口
至此为止,我已经无能为力了,soap11的端口名称对了,soap12端口名称是自己生成的,和标准的还是不一样,到现在也不知道怎么改。总之现在我们都用soap1.1协议,所以暂时没有问题。期待高手帮忙解答。
相关文章推荐
- webservice 服务端例子+客户端例子+CXF整合spring服务端测试+生成wsdl文件 +cxf客户端代码自动生成
- C#根据WSDL文件生成WebService服务端代码
- C#根据WSDL文件生成WebService服务端代码
- 利用wsdl2java工具生成webservice的客户端代码
- webService 根据wsdl地址生成java客户端代码
- WebService系列博客{三}[通过本地Wsdl文件生成客户端调用代码、MyEclipse视图调用webservice]
- webservice,wsdl生成服务端代码,eclipse使用Axis框架生成
- 使用axis2解析wsdl生成Webservice客户端代码
- MyEclipse根据WSDL文件生成WebService客户端并调用服务端方法
- wsdl2java 生成webService客户端代码,并读取数据
- cxf发布webservice简介 及 wsdl2java生成客户端代码
- 普元 EOS Platform 7.5 将逻辑流封装为webservice,wsdl文件上右键,生成客户端代码,提示:选择的wsdl文件中没有服务信息
- 使用Axis2中的工具wsdl2Java的生成客户端和服务端代码
- webservice wsdl2Java 生成客户端代码
- 利用wsdl2java工具生成webservice的客户端代码
- C#根据WSDL文件生成WebService服务端代码
- C#根据WSDL文件生成WebService服务端代码
- C#根据WSDL文件生成WebService服务端代码
- 利用WSDL2java 生成cxf webservice 客户端代码
- 利用wsdl文件生成webservice接口的java客户端测试代码