如何解决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服务器。这可能会有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。