2016-12-06 8 views
10

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에서 보내겠습니까?

+0

질문에 대한 답변이 아니지만 'refreshWSDL = true'를 수행하여 캐싱과 같은 바보가 아닌지 확인하십시오. :) – Leigh

+0

'cfinvoke'를 사용해 보았는데 여전히 작동하지 않습니다. – MPaul

+0

Ok. WS 객체를 확인하는 것은 (적절한 범위 내에서) 버전 1로 실제로 만들어졌습니다. 지금 당장 2016에 액세스 할 수는 없지만 항상 뭔가 바뀌었을 가능성이 있습니다. 죄송합니다 더 도움이되지 못했습니다. – Leigh

답변