coldfusion网络服务问题

时间:2011-06-13 05:10:47

标签: web-services coldfusion

我有以下网络服务电话:

    <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> 

这会调用以下Web服务:

<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. 

我已经拖累谷歌跟踪了这类错误的常见嫌疑人,到目前为止无济于事。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

在通过webservice调用时,您可能需要传递函数中可用的所有参数,但是如果您想要作为可选项传递,则需要告诉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> 

答案 1 :(得分:0)

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