【问题标题】:coldfusion web service issueColdfusion网络服务问题
【发布时间】:2011-06-13 23:37:35
【问题描述】:

我有以下网络服务调用:

    <cfinvoke webservice="#application.capsRemote#card.cfc?wsdl" method="purchase" returnVariable="retpurchase" refreshwsdl="true">
        <cfinvokeargument name="iCustomer" value="#session.user.customerCode#">
        <cfinvokeargument name="iAmountCents" value="#form.cc_amount*100#">
        <cfinvokeargument name="sCard" value="#form.cc_number#">
        <cfinvokeargument name="sExpiry" value="#form.cc_expiry#">
        <cfinvokeargument name="sType" value="PAYMENT">
        <cfinvokeargument name="sSecurityNo" value="#form.cc_securitycode#">
    </cfinvoke> 

这会调用以下网络服务:

<cffunction name="purchase" access="remote" returntype="struct" hint="This function wraps calls to the purchase method of the Buyline OCX at Compass">
<cfargument name="iCustomer" required="yes" type="string">
<cfargument name="iAmountCents" required="yes" type="string">
<cfargument name="sCard" required="yes" type="string">
<cfargument name="sExpiry" required="yes" type="string" hint="Format yyyymm">   
<cfargument name="sType" required="yes" type="string">
<cfargument name="sSecurityNo" required="yes" type="string">
<cfargument name="sMerchant" required="no" default="F" type="string">
<cfargument name="sBuylineUser" required="no" default="FreenetWeb" type="string">

<cfscript>
    var Status = "";
    var StatusText = "";
    var ResponseSequence = "";
    var ResponseCode = "";
    var ResponseText = "";
    var stReturn = StructNew();
</cfscript>

<cftry>
    <cfobject type="COM" action="Create" name="oBuyline" class="ctlBuyline.Buyline">
    <cfscript>  
        // Create an instance of the OCX 
        oBuyline.Server = variables.sBuylineServer;
        oBuyline.RemotePort = variables.nBuylineRemoteport;
        oBuyline.UserName = variables.sBuylineUsername;
        oBuyline.Password = variables.sBuylinePassword;
        oBuyline.Timeout = variables.sBuylineTimeout;
    </cfscript>
    <cfscript>
        // calling the purchase method, call does not contain the sSBank argument   
        Status = oBuyline.Purchase(arguments.sMerchant,arguments.iCustomer,arguments.iAmountCents,arguments.sCard,arguments.sExpiry,arguments.sBuylineUser,arguments.sType,0,arguments.sSecurityNo);


        switch(Status)
        {
            case "0":
                StatusText = oBuyline.ResponseText;
                break;
            case "1":
                StatusText = "Successful transaction";
                break;
            case "2":
                StatusText = oBuyline.ResponseText;
                break;
            default:
                StatusText = "CAPS: Unknown issue with communicating with Buyline";             
        }       
        // response from the purchase method
        ResponseSequence = oBuyline.Sequence;
        ResponseCode = oBuyline.ResponseCode;
        if (ResponseCode neq "0"){
            ResponseText = "Declined (" & Replace(oBuyline.ResponseText, "ERROR~~", "") & ")";
        } else {
            ResponseText = "Approved";
        }
        // set return values
        stReturn.Status = Status;
        stReturn.StatusText = StatusText;
        stReturn.ResponseSequence = ResponseSequence;
        stReturn.ResponseCode = ResponseCode;
        stReturn.ResponseText = ResponseText;
        if (sMerchant eq "T") {
            stReturn.MerchantId = "TEST555555";
        } else {
            stReturn.MerchantId = "1111111";
        }
        //
        return stReturn;        
    </cfscript>

    <cfcatch type="any"><!--- catch code ---></cfcatch>
</cftry>

但是,我收到以下错误:

Web service operation purchase with parameters {sSecurityNo={111},iAmountCents={100.0},sExpiry={201310},sCard={1111111111111111},iCustomer={111111},sType={PAYMENT}} cannot be found. 

我已经在谷歌上搜索并跟踪了此类错误的常见嫌疑人,但到目前为止无济于事。

非常感谢任何帮助。

【问题讨论】:

    标签: web-services coldfusion


    【解决方案1】:

    通过 web 服务调用时,您可能需要传递函数中可用的所有参数,但如果您想作为可选参数传递,则需要告诉 ColdFusion 忽略它,只需添加属性 omit= "true" 见下文

       <cfinvoke webservice="#application.capsRemote#card.cfc?wsdl" method="purchase" returnVariable="retpurchase" refreshwsdl="true">
        <cfinvokeargument name="iCustomer" value="#session.user.customerCode#">
        <cfinvokeargument name="iAmountCents" value="#form.cc_amount*100#">
        <cfinvokeargument name="sCard" value="#form.cc_number#">
        <cfinvokeargument name="sExpiry" value="#form.cc_expiry#">
        <cfinvokeargument name="sType" value="PAYMENT">
        <cfinvokeargument name="sSecurityNo" value="#form.cc_securitycode#">
        <cfinvokeargument name="sMerchant" value="" omit="true">
        <cfinvokeargument name="sBuylineUser" value="" omit="true">
       </cfinvoke> 
    

    【讨论】:

      【解决方案2】:

      我记得有一次我在创建 Web 服务时,每当我更改底层代码时,通过 java.util.stub 就不会再次创建存根。因此,您被调用的 Web 服务实际上不会在服务器端刷新。这真的很奇怪。即使我输入了 refreshWSDL=true,它也无法识别更改。您可能想尝试重新启动 cf 服务器。这可能会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-20
        • 2019-03-10
        • 1970-01-01
        • 1970-01-01
        • 2010-11-14
        • 2017-08-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多