다음 텍스트의 번역된 이름 비교표:
페이로드: 대화 내용
객체: 인스턴스
함수: 함수
PHP를 사용하여 네트워크 서비스 구현
프레임워크 사용: WSO2 WSF/ PHP
설치환경 : windows or linux
(컴퓨터 기사가 이제 이해하기 어려운 번역과 용어가 셀 수 없을 만큼 많아서 역겨워서 여기서는 음성언어와 중국어를 사용하려고 합니다.)
WSMessages 클래스:
네트워크 서비스를 호출하는 과정에서는 보낸 메시지와 받은 메시지라는 두 가지 메시지가 필요하며, 두 메시지가 왔다 갔다 해야 통신할 수 있습니다. WSMessages 클래스는 PHP용 오픈 소스 프레임워크 웹 서비스 프레임워크(줄여서 WSF)에서 이 두 메시지를 캡슐화하는 데 사용됩니다.
WSMessages에는 메시지 내용을 저장하고 "페이로드"를 xml 형식으로 저장하는 매우 중요한 변수 str이 있습니다. (이 페이로드를 호출하는데, 영어 사전을 확인해 보니 그런 뜻인데 앞뒤로 반복적으로 나타납니다. 이제 보이는 모양은 xml의 정의와 소위 '네임스페이스'->네임스페이스 정의를 실제로 제거하는 대화의 내용입니다. 네임스페이스가 무엇인지 알아보려면 xml 정의의 W3C를 확인하세요. ). 페이로드가 너무 당황스러워서 앞으로는 '대화 콘텐츠'라고 부르겠습니다.
클라이언트 프로그램을 통해 요청을 보내는 경우 WSMessage의 인스턴스를 구성하고 xml 형식의 대화 내용으로 인스턴스를 채워야 합니다. 요청에 대한 응답은 여전히 프로그램을 통해 반환되는 "대화 콘텐츠"이며, 반환되는 것은 여전히 WSMessage 인스턴스입니다.
즉, 클라이언트 함수가 네트워크 서비스에 응답하는 경우 해당 반환 값도 WSMessage 인스턴스입니다.
함수에서 요청을 보내고, 네트워크 서비스 프로그램을 호출하고, 반환 콘텐츠를 WSMessage 인스턴스에 넣고, 함수가 이 WSMessage 인스턴스를 반환하도록 할 수 있습니다.
WSMessage는 첨부 파일과 같은 복잡한 콘텐츠를 보내고 받는 경향이 더 큽니다. WSMessage를 사용하여 클라이언트와 서버 간 통신하는 방법을 자세히 설명하겠습니다.
대화 내용 처리:
이미 PHP를 사용하여 네트워크 서비스를 만드는 방법을 설명했고 작업 흐름을 설명하기 위해 간단한 클라이언트-서버 프로그램을 만들었습니다. 하지만 이들 프로그램은 우리가 '대화 내용'을 어떻게 처리하는지 깊이 있게 설명하지 않습니다. 즉, 대화 내용을 xml 형식으로 서버에 보냈을 뿐 처리할 생각은 하지 못한 것입니다. 여기서는 대화 내용을 처리하는 방법과 이를 컴퓨팅 프로그램에서 활용하는 방법을 자세히 설명합니다.
대화 내용은 비즈니스 로직에 의해 정의되고 SOAP(Simple Object Access Protocol)를 사용하여 캡슐화되는 내용입니다(SOAP w3c 기사 참조). 계승을 계산하는 방법을 설명하기 위해 예를 사용하겠습니다.
클라이언트가 보내야 하는 대화 콘텐츠:
6
서버는 이 대화 콘텐츠를 이해해야 합니다. 그리고 그것을 처리합니다. 변수가 해결되고 계승이 계산됩니다. 다음은 서버 프로그램입니다:
function getFactorial ( $message ) {
$simplexml = new SimpleXMLElement ( $message -> str )
$value = $simplexml ->
$result = 계승( $value ) ;
$responsePayloadString = <<
XML;
return $responsePayloadString;
}
3번째 줄에서는 '대화 내용'을 입력하여 simpleXmlElement의 인스턴스를 만듭니다. 함수 파라미터를 통해 전달된 WSMessage 인스턴스의 $message의 str 변수에 입력된 대화 내용이 저장되는 것을 확인할 수 있습니다. 참고: SimpleXml은 xml 파일이나 문자열을 처리하기 위한 PHP 확장입니다. WSO2 WSF/PHP는 xml을 처리하는 데 사용해야 하는 PHP 확장자를 지정하지 않습니다. domdocument, saxdom 등과 같이 즐겨 사용하는 XML 및 PHP 확장을 사용하여 이를 처리할 수 있습니다.
4행은 대화 내용에서 매개변수 값을 추출하는데, 이는 서비스 프로그램이 매개변수 유형 등 이러한 매개변수를 이해하는 방법을 알아야 함을 의미합니다. (일반적으로 이 매개변수의 유형은 대화 내용에 명시되어야 합니다.) 함수의 나머지 부분은 계승의 일반적인 처리입니다. 6행에서는 다른 함수를 호출하여 계승을 계산합니다. 8~12행에는 답장 대화 내용도 작성되어 반환되어야 합니다. 14행에서는 응답의 대화 내용을 반환합니다.
응답 대화 내용은 거의 다음과 같아야 합니다.
$response = $client -> 요청 ( $reqestPayloadString )
$simplexml = new SimpleXMLElement ( $response -> str ) ;
echo "Result = " . $simplexml -> result [ 0 ] "
" 응답의 대화 내용이 포함된 SimpleXMLElement 인스턴스. 마찬가지로 $response는 WSMessage의 인스턴스이기도 하며 응답의 대화 내용을 xml 형식으로 저장하는 멤버 변수 str에 액세스할 수 있습니다. 이를 SimpleXMLElement 생성자에 전달하여 SimpleXMLElement의 인스턴스를 만듭니다. 그런 다음 결과 요소(또는 노드? 요소, xml에서는 요소라고 할 수 있지만 트리 구조의 경우 노드가 너무 많지 않습니까?)
이제 채팅 정보 콘텐츠를 처리하는 방법을 배워야 합니다. 클라이언트의 애플리케이션이든 서버의 응답이든 상관없습니다.
참고: 서버측 getFactorial 함수(14행)에서는 회신 대화 내용 대신 WSmessage를 반환할 수 있습니다. 이 기능을 달성하려면 다음과 같은 간단한 프로그램을 사용할 수 있습니다.
$outMessage = new WSMessage( $responsePayloadString );
return $outMessage ;
이는 실제로 서버 프로그램이 xml 형식으로 대화 내용을 반환할 수 있고 WSMessage
Complete의 인스턴스도 반환할 수 있음을 의미합니다. 프로그램은 이 글 마지막에 첨부하겠습니다.
메시지 추적
PHP용 WSO2 웹 서비스 프레임워크를 통해 클라이언트가 보낸 SOAP 메시지를 추적할 수 있으며, 클라이언트는 서버로부터 메시지(즉, 대화 내용)를 받습니다. 네트워크 클라이언트 서비스 클래스인 WSClient에는 이 목적을 달성하기 위한 두 가지 함수(getLastReauest() 및 getLastResponse())가 있습니다. 클라이언트가 request() 함수를 사용한 후, 이 두 함수를 통해 대화 정보를 얻을 수 있습니다.
$response = $client -> 요청( $reqestPayloadString ) ;
printf( "
요청 = %s " ,
htmlspecialchars( $client -> getLastRequest ())) ;
printf ( "
응답 = %s " ,
htmlspecialchars ( $client -> getLastResponse ()))
위 프로그램 조각은 request() 함수에 의해 구현된 요청 및 응답 내용을 표시합니다.
실제로 이 프로그램은 다음과 같이 출력합니다.
Request =
SOAP 메시지 추적은 호출되는 서비스를 연구하는 데, 특히 서비스 및 클라이언트 버그를 찾는 데 매우 유용합니다. 예를 들어 클라이언트가 보낸 메시지와 서버가 응답한 메시지를 모두 확인할 수 있고, 대화 내용(클라이언트와 서버)의 형식도 확인할 수 있다. 여기서는 번역하지 않겠습니다. 비록 제 꿈은 언젠가 프로그램이 중국어로 작성되는 것이지만, 이 꿈은 점점 우리에게서 멀어지는 것이 분명합니다.)
사용자는 PHP WSF를 사용할 때 때때로 두 가지 문제에 직면합니다. 질문:
wsf를 설치하세요. 이 wsf가 제대로 작동하는지 어떻게 확인할 수 있나요? 자, 먼저 phpinfo() 함수를 통해서 확인하시면 됩니다. (이 함수와 사용법을 모르신다면 어, php 매뉴얼을 확인해보세요.) php 파일을 하나 만들어서 이렇게 작성하시면 됩니다. 문장을 읽고 브라우저에서 엽니다.
phpinfo () ;
?>
모든 확장 기능이 올바르게 설치되면 테이블에 wsf라는 항목이 표시됩니다. 'wsf 지원'과 같은 단어. 이 내용은 php.ini에 정의되어 있습니다. (또는 예를 들어 php.ini에 정의하지 않았지만 /etc/php5/conf.d/에 wsf.ini라는 새 파일을 작성했습니다. 실제로 이 파일의 모든 파일은 폴더는 나중에 php.ini에 병합되므로 php.ini에서 해당 설정을 찾을 수 없지만 wsf를 사용할 수 없는 경우 여기로 와서 살펴볼 수도 있습니다.)
이 확장 기능이 없으면 phpinfo에 표시되면 주의 깊게 연구하려면 설치 안내서를 찾아야 합니다. 찾을 수 없으면 ferdinandfly@yahoo.ca로 이메일을 보내주십시오.
성공적으로 설치한 후 두 번째 문제는 예제가 올바르게 실행되지 않는 것 같다는 것입니다. 마찬가지로 일부 설정이 올바른지 확인해야 합니다. 첫 번째는 php.ini 레코드에 일부 로그 파일에 대한 경로가 설정되는 경우가 많거나 경로가 존재하지 않거나 설정한 경로를 php5에서 읽고 쓸 수 없다는 것입니다. 또한 php.ini에 일부 스크립트 파일이 포함되어 있고 이러한 스크립트 파일을 읽을 수 있는지 확인해야 합니다.
위 내용은 맞는데 wsf가 동작하지 않는다면, 로그 파일을 확인해보시면 됩니다. 로그 파일은 wsf.log_path 레코드에 의해 결정된 경로에 기록됩니다. 이 내용은 php.ini에 설정되어 있습니다. 설정되지 않은 경우 로그는 /tmp(linux)에 있습니다. 알아야 할 것은 Windows 플랫폼에서는 기본 경로가 존재하지 않을 수 있으므로 이에 대한 로그 경로를 지정해야 한다는 것입니다. 서비스와 관련된 로그는 wsf_php_server.log에 기록되고 클라이언트와 관련된 로그는 wsf_php_client.log에 저장됩니다. 클라이언트와 서비스 호스트가 동일한 시스템이 아닌 경우 두 파일이 모두 서버에 있습니다. 로깅 수준을 조정하여 다양한 세부 수준의 로그 파일을 얻을 수 있습니다. 디버깅 중이라면 레벨 4로 설정할 수 있습니다. 물론, 성숙한 소프트웨어라면 0(심각한 오류만) 또는 1(오류)로 설정할 수 있습니다.
교환 콘텐츠(SOAP)가 원하는 형식인지 확인하려면 앞서 설명한 것처럼 SOAP 메시지 추적을 사용하여 디버깅할 수 있습니다.
요약:
이 기사에서는 WSMessage 클래스와 대화 내용을 처리하고 사용하는 방법을 설명했습니다. 클라이언트 또는 서버는 WSMessage(xml)의 str 멤버 변수를 호출하여 대화 내용을 가져올 수 있습니다. . 일반적으로 대화 내용의 형식은 WSDL을 통해 정의되므로 클라이언트와 서버가 동일한 형식을 따르도록 요구하는 것이 합리적입니다. 다음 장에서는 WSO2를 통해 WSF/PHP 및 WSDL과 함께 작업하는 방법에 대해 설명하겠습니다.
더 많은 관련 기사를 보려면 PHP 중국어 웹사이트(www.php.cn)를 주목하세요!