首页 新闻 搜索 专区 学院

C#调用Java语言编写的SOAP wsdl WebService报错

0
悬赏园豆:50 [已解决问题] 解决于 2014-02-28 13:31

由于客户公司业务需要调用第三方公司提供的Service,他们是用Java实现的。给到我们的是 类似这样的 一个service地址“https://www.abc.com/ecwebservice/WebServiceSOAP?wsdl”,本来以为在Visual Studio中添加WebService引用就可以了。

但是在添加引用后,直接在new Service对象的时候就报错了。。。
“Method  aaa.methodeName can not be reflected.”

Visual Studio 调试的 InnerException 错误

1
 “{"The XML element 'registerResponse' from namespace 
'https://www.abc.com/ecwebservice/' references a method and a type. 
Change the method's message name using WebMethodAttribute or change 
the type's root element using the XmlRootAttribute."}”



本来以为是接口问题,但是接口提供公司提供的Apache JMeter测试用例导入到我的机器也是可以测试通过的。

不知道这种 https协议和WsdL格式的Java WebService在C#调用的时候有什么讲究?

期待各位的见解。。

菜鸟飞不动的主页 菜鸟飞不动 | 初学一级 | 园豆:5
提问于:2014-02-26 22:33
< >
分享
最佳答案
0

你用 SOAP UI 这个工具测试下,也可以通过它来生成 C# 代理类。

跟 HTTPS 无关,WSDL 的解释你可以自行搜一下,这同 https://www.abc.com/ecwebservice/WebServiceSOAP 的元数据描述有关(使用 WSDL 描述)。

异常已经提到两种解决方案,你也可以照着提示修改下自动生成的代码。

造成这个问题的直接原因是第三方公司提供的 Web Service 并不是按照行业标准来编写的,这类似的情况多见于使用 JAVA 编写的 Web Service,因为这类人普遍从业水品不高,而 JAVA 又没有标准的工具用于支持(C# 有 Asp.Net Web Service 和 WCF 两类标准的 Web Service 开发工具包)。

收获园豆:45
Launcher | 高人七级 |园豆:45045 | 2014-02-27 14:16

非常感谢您的指导。如果是非标准的Service,就只能修改自动生成的代码以此来解决吗?修改这个自动生成的代码估计不会太简单,因为对那么一大篇一点不熟悉。

菜鸟飞不动 | 园豆:5 (初学一级) | 2014-02-27 14:52

@Dhoopu: 单从你这里的异常提示的信息来看,通过修改自动生成的代码就可以解决。如果你不想修改,或者觉得修改起来很困难,你也可以使用 SOAP UI 生成的代理类(不保证正确),或者自己编写代理类。自己编写代理类的方式有两种:一、采用 WCF,通过服务的元数据分析出服务契约和数据契约;二、使用 HttpWebRequest 和 HttpWebResponse 来组织 SOAP 消息。

Launcher | 园豆:45045 (高人七级) | 2014-02-27 15:21

@Launcher: 非常感谢你的帮助,我来试试。被折腾的不轻了…多谢

菜鸟飞不动 | 园豆:5 (初学一级) | 2014-02-27 15:30

@Dhoopu: 要做这种兼容,最好还是学习下 SOAP 和 Web Service,不求深入,但是至少要能读懂 WSDL。

Launcher | 园豆:45045 (高人七级) | 2014-02-27 15:49

@Launcher: 嗯。谢谢。

菜鸟飞不动 | 园豆:5 (初学一级) | 2014-02-27 15:58

谢谢。终于能通了。修改了自动生成的代码解决了。

菜鸟飞不动 | 园豆:5 (初学一级) | 2014-02-28 13:33
其他回答(1)
0

以前曾经做过个简单的WCF客户端调用的例子

http://www.cnblogs.com/downmoon/archive/2010/08/25/1807982.html

收获园豆:5
邀月 | 园豆:25375 (高人七级) | 2014-02-27 15:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册