我有一个必须使用SOAP Web服务的.Net 4项目。我有一些在Visual Studio(2008/2010)中添加Web引用的经验,我使用Web服务引用工具。
开始之前:
我已将WSDL上传到http://pastebin.com/huSE0Qeh
所以对我的问题:
我将我的Web服务引用添加到我的项目中,生成了类和方法,并编写了一些用于测试的基本代码。我已经让负责该服务的人员解释了代码,并让我的PHP副本从同一个WSDL生成一些PHP文件。
问题是响应对象包含null属性。我没有例外。
我接下来尝试了什么:
我尝试使用WSDL.exe来创建类文件,但它又在响应对象中得到了null。我还看到了以下错误(我已经将它们修剪掉了):
> R2706: A wsdl:binding in a DESCRIPTION MUST use the value of "literal"
> for the use attribute in all soapbind:body, soapbind:fault,
> soapbind:header and soapbind:headerfault elements.
> - Input element soapbind:body of operation 'getProfile' on portType 'connect.cfcSoapBinding' from namespace 'http://ws'.
> - Output element soapbind:body of operation 'getProfile' on portType 'connect.cfcSoapBinding' from namespace 'http://ws'.
> - soapbind:fault 'CFCInvocationException' on operation 'getProfile' on portType 'connect.cfcSoapBinding' from namespace 'http://ws'.
> - Input element soapbind:body of operation 'getGroups' on portType 'connect.cfcSoapBinding' from namespace 'http://ws'.
> - Output element soapbind:body of operation 'getGroups' on portType 'connect.cfcSoapBinding' from namespace 'http://ws'.
> - soapbind:fault 'CFCInvocationException' on operation 'getGroups' on portType 'connect.cfcSoapBinding' from namespace 'http://ws'.
> - Input element soapbind:body of operation 'MessageReply' on portType 'connect.cfcSoapBinding' from namespace 'http://ws'.
> - Output element soapbind:body of operation 'MessageReply' on portType 'connect.cfcSoapBinding' from namespace 'http://ws'.
然后我尝试使用svcutil.exe使用以下命令(在Googling之后):
svcutil.exe /language:cs /out:generatedProxy.cs /config:app.config http://www.myurl.com/test.wsdl
然后收到以下错误(再次删减):
Warning: Fault named CFCInvocationException in operation getProfile cannot be imported. Unsupported WSDL, the fault message part must reference an element. This fault message does not reference an element. If you have edit access to the WSDL document, you can fix the problem by referencing a schema element using the 'element' attribute.
Warning: Fault named CFCInvocationException in operation getGroups cannot be imported. Unsupported WSDL, the fault message part must reference an element. This fault message does not reference an element. If you have edit access to the WSDL document, you can fix the problem by referencing a schema element using the 'element' attribute.
我还尝试使用/useSerializerForFault
标记(在更多Google搜索之后),但我又收到了更多错误。
所以我现在不知所措。 PHP等效工作正常,一个名为SOAP UI的工具也正常,所以我认为这是一个Visual Studio / .Net问题吗?
任何帮助都会很棒!
答案 0 :(得分:2)
经过数小时的反复试验后,“发现”将属性设置为encoded
而不是literal
是罪魁祸首。 Visual Studio遇到了这个问题,谢天谢地,Coldfusion的开发人员为我改为literal
。
答案 1 :(得分:1)
Visual Studio代理生成器似乎无法接受其CFCInvocationException
错误的ColdFusion WSDL定义。您可以尝试找出如何调整WSDL以使WCF(或ASMX)代理生成器接受它,但我建议您只需从WSDL中完全删除故障定义。
故障定义用于生成WCF FaultException
泛型的强类型版本(不记得ASMX中发生的情况)。如果从WSDL中删除“违规”错误定义,您可能会丢失它可能包含的一些详细信息,但是如果它被抛出,您仍然能够捕获故障。至少这是成功调用ColdFusion服务的第一步,您可以随后回过头来添加错误WSDL。