#coldfusion
#coldfusion
Вопрос:
У меня возникли большие проблемы при общении с веб-службой для нашей базы данных участников. Я получаю действительный результат из своего конверта SOAP при использовании SoapUI. Но когда я пытаюсь отправить тот же конверт, используя CFHTTP и CF9 (я знаю, я знаю), я получаю ошибку «404 не найдено», независимо от того, что я пытаюсь сделать. Доступ к URL-адресу в браузере выдает ошибку «отказано в доступе».
Вот что у меня есть в cfsavecontent:
<cfsavecontent variable="soapBody">
<cfoutput>
<?xml version=“1.0” encoding=“utf-8”?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sch="http://membersuite.com/schemas" xmlns:con="http://membersuite.com/contracts">
<soapenv:Header>
<sch:ConciergeRequestHeader>
<!--Optional:-->
<sch:BrowserId></sch:BrowserId>
<!--Optional:-->
<sch:SessionId></sch:SessionId>
<sch:AccessKeyId>MyAccessKey</sch:AccessKeyId>
<!--Optional:-->
<sch:AssociationId>MyAssociationID</sch:AssociationId>
<sch:Signature>MySignature</sch:Signature>
</sch:ConciergeRequestHeader>
</soapenv:Header>
<soapenv:Body>
<con:LoginToPortal>
<!--Optional:-->
<con:portalUserName>username</con:portalUserName>
<!--Optional:-->
<con:portalPassword>password</con:portalPassword>
</con:LoginToPortal>
</soapenv:Body>
</soapenv:Envelope>
</cfoutput>
</cfsavecontent>
И вот мой cfhttp:
<cfhttp url="https://soap.membersuite.com/mex" method="post" useragent="#CGI.http_user_agent#">
<cfhttpparam type="header" name="charset" value="utf-8">
<cfhttpparam type="header" name="mimetype" value="application/xml" />
<cfhttpparam type="header" name="content-type" value="text/xml">
<cfhttpparam type="header" name="SOAPAction" value="http://membersuite.com/contracts/IConciergeAPIService/LoginToPortal" />
<cfhttpparam type="header" name="accept-encoding" value="no-compression" />
<cfhttpparam type="header" name="content-length" value="#len(trim(soapBody))#">
<cfhttpparam type="xml" name="soapenv" value="#trim(soapBody)#" />
</cfhttp>
Сброс cfhttp выдает мне эту ошибку:
Мне кажется очевидным, что удаленный сервер сообщает мне, что он не может найти то, о чем я его прошу. Но это правильная конечная точка, и я вижу ее в WSDL:
<wsdl:operation name="LoginToPortal">
<wsdl:input wsaw:Action="http://membersuite.com/contracts/IConciergeAPIService/LoginToPortal" message="tns:IConciergeAPIService_LoginToPortal_InputMessage"/>
<wsdl:output wsaw:Action="http://membersuite.com/contracts/IConciergeAPIService/LoginToPortalResponse" message="tns:IConciergeAPIService_LoginToPortal_OutputMessage"/>
</wsdl:operation>
Я также добавил сертификат SSL со страницы веб-службы в свой CF keystone; никаких изменений в сообщении об ошибке. Я в тупике и буду признателен за любые предложения! Опять же, я получаю ожидаемые результаты обратно через SoapUI. Большое вам всем спасибо!
Ответ №1:
Похоже, что он работает, если целевой URL-адрес изменен на https://soap.membersuite.com /. При использовании поддельных учетных данных ответ изменяется на «Указан недопустимый идентификатор ключа доступа» вместо 404.
<cfhttp url="https://soap.membersuite.com/" method="post" useragent="#CGI.http_user_agent#">
<cfhttpparam type="header" name="Content-Type" value="text/xml; charset=utf-8" />
<cfhttpparam type="header" name="SOAPAction" value="http://membersuite.com/contracts/IConciergeAPIService/LoginToPortal" />
<cfhttpparam type="header" name="Accept-Encoding" value="no-compression" />
<cfhttpparam type="header" name="Content-Length" value="#len(trim(soapBody))#">
<cfhttpparam type="body" value="#trim(soapBody)#" />
</cfhttp>
Комментарии:
1. ЛОЛ! Это все? Итак, я попробовал ваше предложение, и я получил ошибку 400 bad request — прогресс! У меня было кое-что, оставшееся в моем запросе SOAP после тестирования. Я удалил его, обновил свои учетные данные, и это сработало!! Это потрясающе, большое тебе спасибо, Ли! Я действительно ценю помощь (снова)! Удачных вам выходных!
2. Заголовки можно было бы немного подправить, но … да, именно так. У меня сегодня тоже был такой. Просто обожаю, когда что-то такое маленькое вызывает такие головные боли 😉
3. Что ж, я обязательно начну внимательнее рассматривать вещи, которые должны быть для меня более понятными. Большое тебе спасибо за то, что предоставила этот «поучительный момент», Ли. Я не хочу признаваться, сколько времени я потратил, пытаясь разобраться в этом, прежде чем опубликовать здесь! 🙂 Я очень ценю ваше терпение и помощь!
4. Хех, всегда пожалуйста. Иногда это просто вторая пара глаз или воспоминание о том, чтобы немного отойти. Как только я, наконец , сделал это вчера, моя собственная глупость с лишением сна мгновенно стала понятной 😉 В любом случае, по крайней мере, теперь мы можем наслаждаться выходными!
5. Действительно, мы можем! И я надеюсь, что у вас он будет отличным. Ваше здоровье! И еще раз большое вам спасибо. Я действительно ценю это.