문제

사용할 수 있도록 최선을 다하고 있습까지 보낼 100 요청 내부에는 1 비누 메시지입니다.보내는 동안 이 종류의 대량 Ooutbound 메시지 요청 내 PHP 스크립트가 완료되면 실행하지만 SF 을 받아들이지 못하 ACK 사용하여 명확한 메시지 큐에 Salesforce 사이드의 것들입니다.보고에서는 메시지를 로그 아웃바운드(monitoring)나는 모든 메시지를 보류중인 상태로 배송에 실패한 이유"java.net.SocketTimeoutException:읽 timed out".는 경우 스크립트가 완료되면 실행,표시되는 이유는 무엇입니까이 오류가?

가 이러한 증가 방법을 실행시간에 서버에 액세스 할 수 없 Salesforce 측면:

  • set_time_limit(0);//에서 스크립트
  • max_execution_time 을=360;최대 실행 시간의 각 스크립트를 초 단위로
  • max_input_time=360;최대한 양의 시간 각 스크립트를 보낼 수 있습니다 분석 데이터를 요청
  • memory_limit=32M;최대 메모리를 스크립트를 소모할 수 있습니다

내가 사용하는 높은 설정을 테스트합니다.

어떤 생각이 왜 이것은 실패 응답하 Salesforce?

여기에 몇 가지의 코드:이것은 어떻게 받아들이고 보내는 ACK 파일에 대한 imcoming 비누 요청

$data = 'php://input';
$content = file_get_contents($data);

if($content) {
    respond('true');
} else {
    respond('false');
}

에 대응하는 기능

function respond($tf) {
    $ACK = <<<ACK
<?xml version = "1.0" encoding = "utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <notifications xmlns="http://soap.sforce.com/2005/09/outbound">
            <Ack>$tf</Ack>
        </notifications>
    </soapenv:Body>
</soapenv:Envelope>
ACK;

    print trim($ACK); 
}

이들은 일반적으로 스크립트는 포함한 스크립트로 사용하는 데이터에 대한 특정 워크플로우.수 프로세스에 대해 25 요청(에 있는 1 비누 응답)하지만 일단 제가 가는 것을 제한 시간에 오류가 Salesforce 큐가 있습니다.50 요청은 일반적으로 내 PHP 스크립트 86.77 초입니다.

수 Apache?PHP?

나는 또한 테스트를 수락 100 요청 SOAP 대응하고 그냥 받아들이고 보내는 ACK 큐를 지웁니다,그래서 그것을 알고 내면의 것들입니다.

내가 쇼에 오류가 아파치 로그인 스크립트를 실행 합니다.

내가 찾았어요 몇 가지 정보에 Salesforce 사이트는 없지만 여전히 행운입니다.기 링크.

또한 나를 사용하 PHP Toolkit11(Salesforce).

다른 포럼 좋은 도움 SF

감사에 대한 어떤 통찰력이 필--

업데이트:

을 받은 경우에는 들어오는 메시지를 인쇄 응답이 먼저 일어날 경우에 관계없이 나는 무엇일까요?또는 그것을 기다리 나의 프로세스가 완료 및 인쇄한 다음 대답하시겠습니까?

업데이트#2:

좋아요 생각 나는 문제는:PHP 사용하여 하나의 스레드 처리 접근 방식이 다시 보내지 ACK 파일까지 스레드가 완성된 그것의 처리합니다.하는 방법이 있습이 system 의 실 프로세스?Thread#1-받아들이 들어오는 비누를 요청하고 다시 보낼 ACK Thread#2-프로세스 SOAP 요청

난탈할 수 있으로 다음과 같 DB 테이블 또는 평면 파일이 있지만,거기에 성취하는 방법이 없을까?

내가 하려고 가까이서 소켓이 한 후 ACK 를 전송 및 처리를 계속,내가 그것이 작동합니다.

도움이 되었습니까?

해결책 5

그래서 내가 무슨 짓을 한 것은:

  1. 을 받아 들어오는 모든 OBM 의,구문 분석으로 그들을 DB
  2. 할 때 이를 수행 킥의 실행하는 프로세스에서는 배경(실제로 나는 그것을 보내도록 배경은 스크립트 엔드)
  3. 보 ACK 파일

그냥 받아들이 원시 데이터,구문 분석 분야로에 삽입할 수 있는 DB 은 매우 간단히 진행됩니다.그때 나는 문제는 리눅스 명령행하는 명령을 보낼 수도 처리하는 스크립트를 백그라운드에서 실행됩니다.그때 보낼 ACK 파일을 SF 와 스크립트 끝의 많은 시간을 제공합니다!그것은 성가를 분할하는 스크립트 프로세스는 두 가지로 별도의 단계이지만 그것은 작동합니다.

다른 팁

처럼 들리는 아웃바운드 메시지를 타격한다.다른 사용자의 보고에 시간 제한으로 낮은 10 초 동안(참조하십시오 포럼은 아래 링크).샌드박스는 사용(cs1)이 타이밍 알 약 1 분 후,내에서 테스트합니다.한 제한 시간은 조직 또는 인스턴스의 수준을 설정하는 Salesforce 제어합니다.

두 가지 시도할 수 있습니다:

  1. 지원 티켓 Salesforce 수 있는지 여부를 확인하기 위하여 을 증가 시간 초과 값을 위해 아웃바운드 메시지입니다.에서 나 경험이 많이 있의 는 설정을 수정할 수 있습에 조직 수준이 될 수 있습 그 중 하나입니다.

  2. 오프로드 처리,데이터의 그래서 는 ACK 를 바로 전송 다시 Salesforce.다음 실제 처리하는 데이터의 것 장소이 비동기적으로 수행됩니다.ie.메시지 큐,별도의 스레드,등등.

다른 일부는 리소스에 도움이 될 수 있다:

관련 Salesforce 포럼이 토론

아웃바운드 메시징 설명서

나는 그들이 생각하는 시간 제한 일이 기다리고 스크립트 끝에 있습니다.

있는 방법을 시도해 볼 수도 있습니다.

출력 봉투로 응답 메시지를 시작한 다음 세척한 것은 그들의 서버가기 전에 그것을 당신이 최종 처리합니다.지 않는 스레딩,그냥 평범한 우선 순위를 재검토:)

읽고 이에 대한 최고의 정보서 내뿜는 콘텐츠

당신은 100%Salesforce 기다릴 것이 양의 시간을 당신의 스크립트가 필요 너무나요?80 초처럼 보일 레이 너무 시간이다.

면 모든 요청이 실패한 것 같 Salesforce 는 설정 Content-Type 헤더 적절하게 있지만,이하지 않는 것 같습니다.

I don't know about Salesforce,하지만 당신이 일부를 만들고 싶어 멀티 스레딩 PHP 을 살펴봐야 한다 이 코드 예제 더 정확하게 pcntl_fork().

N.B:pcntl 가 기본적으로 사용 및 작동하지 않을 것에 윈도우 플랫폼입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top