由于客户公司业务需要调用第三方公司提供的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#调用的时候有什么讲究?
期待各位的见解。。
你用 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 开发工具包)。
非常感谢您的指导。如果是非标准的Service,就只能修改自动生成的代码以此来解决吗?修改这个自动生成的代码估计不会太简单,因为对那么一大篇一点不熟悉。
@Dhoopu: 单从你这里的异常提示的信息来看,通过修改自动生成的代码就可以解决。如果你不想修改,或者觉得修改起来很困难,你也可以使用 SOAP UI 生成的代理类(不保证正确),或者自己编写代理类。自己编写代理类的方式有两种:一、采用 WCF,通过服务的元数据分析出服务契约和数据契约;二、使用 HttpWebRequest 和 HttpWebResponse 来组织 SOAP 消息。
@Launcher: 非常感谢你的帮助,我来试试。被折腾的不轻了…多谢
@Dhoopu: 要做这种兼容,最好还是学习下 SOAP 和 Web Service,不求深入,但是至少要能读懂 WSDL。
@Launcher: 嗯。谢谢。
谢谢。终于能通了。修改了自动生成的代码解决了。