coldfusion网站服务问题

问题描述

| 我有以下Web服务电话:
    <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,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. 
我已经搜寻了Google,并跟踪了常见的此类错误嫌疑人,但迄今无济于事。 任何帮助深表感谢。     

解决方法

        通过网络服务调用时,您可能需要传递函数中可用的所有参数,但是如果要作为可选参数传递,则需要告诉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> 
    ,        我记得当我创建Web服务时,每当我更改基础代码时,都不会通过Java再次创建存根。因此,被调用的Web服务实际上不会在服务器端刷新。真的很奇怪。即使我输入了refreshWSDL = true,它也无法识别更改。您可能要尝试重新启动cf服务器。这可能会有所帮助。