ColdFusion 9에서 ColdFusion 2016으로 업그레이드 중이며 웹 서비스가 갑자기 작동하지 않습니다. 축 2이 Cold Fusion 10에 도입되어 기존의 웹 서비스가 작동하지 않기 때문이라고 생각합니다.ColdFusion 2016의 웹 서비스가 더 이상 작동하지 않습니다.
ColdFusion Administrator에서 웹 서비스 버전을 다시 1로 설정하더라도 여전히 작동하지 않습니다.
<cfscript>
objSoapHeader = XmlParse("<wsse:Security mustUnderstand=""true"" xmlns:wsse=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd""><wsse:UsernameToken><wsse:Username>USERNAME</wsse:Username><wsse:Password>PASSWORD</wsse:Password></wsse:UsernameToken></wsse:Security>");
Application.UserWebService = CreateObject("webservice", PATH & "Requests/UserService.asmx?WSDL");
addSOAPRequestHeader(Application.UserWebService,"","",objSoapHeader,true);
// Get the .Net resources
Application.NetResources = Application.UserWebService.GetNetResources();
</cfscript>
내가받을 오류는 다음과 같습니다 :
나는이 웹 서비스를 호출하는 방법은 같은 createObject
기능입니다
Cannot perform web service invocation GetNetResources.
The fault returned when invoking the web service operation is:java.lang.RuntimeException: Error obtaining parser from data source:LanguageHeader cannot be null!
그것은 상태하던 것이 LangaugeHeader
수 없어 null
이됩니다. 메시지 목록을 볼 때 나는 GetNetResources에 관련된 세 개의 메시지를 볼 수 있습니다 그러나
<wsdl:portType name="UserServiceSoap">
<wsdl:operation name="GetNetResources">
<wsdl:input message="tns:GetNetResourcesSoapIn"/>
<wsdl:output message="tns:GetNetResourcesSoapOut"/>
</wsdl:operation>
</wsdl:portType >
: : 작업 만 지정하는 경우
<wsdl:message name="GetNetResourcesSoapIn">
<wsdl:part name="parameters" element=tns:GetNetResources"/>
</wsdl:message>
<wsdl:message name="GetNetResourcesSoapOut">
<wsdl:part name="parameters" element=tns:GetNetResourcesResponse"/>
</wsdl:message>
<wsdl:message name="GetNetResourcesLanguageHeader">
<wsdl:part name="parameters" element=tns:LanguageHeader"/>
</wsdl:message>
을 WSDL은 GetNetResources
운영에 관련된 두 개의 메시지를 표시 두 개의 메시지가있는 경우 WSDL 파일에서 작업과 관련된 세 번째 메시지가 어디에 있습니까?
LanguageHeader 매개 변수가 절대적으로 필요와 ColdFusion 2016 년 enfored 것 같다, 그래서 왜 ColdFusion에서 9 (1 축)에서 일했다?
EDIT 1
portType
반대로 나는 binding
에 다음 코드를 발견 위 (교체 아웃 파업을) 내 첫 번째 질문에 대답하려면 :
<wsdl:binding name="UserServiceSoap" type="tns:UserServiceSoap">
<wsdl:operation name="GetNetResources">
<soap:operation style="document" soapAction="http://tempuri.org/GetNetResources"/>
<wsdl:input>
<soap:body use="literal"/>
<soap:header message="tns:GetNetResourcesLanguageHeader" use="literal" part="LanguageHeader"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
그러나 아직하지 않습니다 내 두 번째 질문에 대답해라.
편집 2
코드로 주위에 비트를 연주 후, 나는 웹 서비스 호출에 변수를 추가하여 RuntimeException
를 해결하기 위해 manged했던.이제 다음과 같은 오류가 발생
args = {TEST="<locale>en-CA</locale>"};
Application.NetResources = Application.UserWebService.GetNetResources(argumentCollection=args);
: TEST
로
Web service parameter name languageHeader cannot be found in the provided parameters {TEST}.
이 WSDL에 지정된 실제 매개 변수 아니다, 나는 languageHeader
에 수정이 새로운 오류받을 :
을Web service operation GetNetResources with parameters {LANGUAGEHEADER={<locale>en-CA</locale>}} cannot be found.
languageHeader
이 실제로 올바른 매개 변수 이름임을 나타내지 만 여전히 웹 서비스 작업을 찾을 수 없으므로 매개 변수의 '유형'이 다릅니다. 내가 이해 한 것과
<wsdl:types>
<s:schema targetNamespace="http://tempuri.org/" elementFormDefault="qualified">
<s:element name="LanguageHeader" type="tns:LanguageHeader"/>
<s:complexType name="LanguageHeader">
<s:sequence>
<s:element name="Locale" type="s:string" maxOccurs="1" minOccurs="0"/>
</s:sequence>
<s:anyAttribute/>
</s:complexType>
</s:schema>
</wsdl:types>
: 아마도
나는 그러나, 값으로 문자열을 보내는 나의 WSDL에보고 할 생각하고 있지 않다, 그것은 그들이 Locale
의 입력한다고는 문자열입니다 문자로 Locale
을 포함하는 매개 변수로 complexType
개체를 보내는 것으로 가정합니다.
그런 경우 어떤 종류의 객체를 CFML에서 보내겠습니까?
질문에 대한 답변이 아니지만 'refreshWSDL = true'를 수행하여 캐싱과 같은 바보가 아닌지 확인하십시오. :) – Leigh
'cfinvoke'를 사용해 보았는데 여전히 작동하지 않습니다. – MPaul
Ok. WS 객체를 확인하는 것은 (적절한 범위 내에서) 버전 1로 실제로 만들어졌습니다. 지금 당장 2016에 액세스 할 수는 없지만 항상 뭔가 바뀌었을 가능성이 있습니다. 죄송합니다 더 도움이되지 못했습니다. – Leigh