3

我们使用 REST API 从一个 Salesforce 组织调用另一个 Salesforce 组织。这一直有效到 11 月底。我们没有对受影响的类或配置进行任何更改。现在,在向 REST API 发送请求时,将抛出一个标注异常,并显示以下消息:“无法通过代理进行隧道。代理返回“HTTP/1.0 503 Service Unavailable”。对 REST API 的授权由会话 ID 完成。有谁知道问题是什么?

这里的代码剪断:

final String WS_ENDPOINT = 'https://login.salesforce.com/services/Soap/c/24.0'; 
final String REST_ENDPOINT = 'https://eu2.salesforce.com/services/apexrest/UsageReporterService';
final String USERNAME = '*****'; 
final String PASSWORD = '*****'; 

HTTP h = new HTTP();
HTTPRequest req = new HTTPRequest();
req.setMethod('POST');
req.setEndpoint(REST_ENDPOINT);
req.setHeader('Content-Type', 'application/json');
req.setTimeout(60000);
HTTP hLogin = new HTTP(); 
HTTPRequest reqLogin = new HTTPRequest(); 
reqLogin.setMethod('POST'); 
reqLogin.setEndpoint(WS_ENDPOINT);
reqLogin.setHeader('Content-Type', 'text/xml'); 
reqLogin.setHeader('SOAPAction', 'login'); 
reqLogin.setTimeout(60000); 

reqLogin.setCompressed(false); 
// get a valid session id
String sessionId;
String loginSoap = '<?xml version="1.0" encoding="UTF-8"?>';    
loginSoap += '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:enterprise.soap.sforce.com">';     
loginSoap += '<soapenv:Body>';     
loginSoap += '<urn:login>'; 
loginSoap += '<urn:username>' + USERNAME + '</urn:username>';     
loginSoap += '<urn:password>' + PASSWORD + '</urn:password>'; 
loginSoap += '</urn:login>';     
loginSoap += '</soapenv:Body>';     
loginSoap += '</soapenv:Envelope>';     
reqLogin.setBody(loginSoap); 

HTTPResponse respLogin; 
try {
    respLogin = hLogin.send(reqLogin);
} catch(CalloutException c){        
    return null;
}       

System.debug('++++++'+respLogin.getStatus() + ': ' + respLogin.getBody());
Dom.Document doc = new Dom.Document();
doc.load(respLogin.getBody());
Dom.XMLNode root = doc.getRootElement();
String ns = root.getNamespace();
Dom.XMLNode bodyEl = root.getChildElements()[0];


 if(bodyEl.getChildElements()[0].getName().equals('loginResponse')){
      sessionId = bodyEl.getChildElements()[0].getChildElement('result', ns).getChildElement('sessionId', ns).getText();
}


 // finished getting session Id     
  if(sessionId != null){ // login was successfull
    req.setHeader('Authorization', 'Bearer ' + sessionId);  
   // serialize data into json string
   UsageReporterModel usageReporterData = new UsageReporterModel();
   String inputStr = usageReporterData.serialize();
   req.setBody('{ "usageReportData" : ' + inputStr + '}');       
   // fire!
   HTTPResponse resp;
   try {
    resp = h.send(req);
   } catch(CalloutException c){             
        return null;
   }            
}
4

1 回答 1

1

我怀疑这将与未正确列入白名单(或添加到“网络访问”对象)的组织之一的 IP 地址更改有关。由于它是 Salesforce 到 Salesforce,我希望 Salesforce.com 支持可以提供帮助吗?

于 2013-11-06T14:23:46.357 回答