> 백엔드 개발 > C#.Net 튜토리얼 > .NET을 사용하여 PHP 웹 서비스를 호출하는 일반적인 예

.NET을 사용하여 PHP 웹 서비스를 호출하는 일반적인 예

黄舟
풀어 주다: 2016-12-15 13:34:13
원래의
1095명이 탐색했습니다.

최근 프로젝트는 "DB2에 직접 액세스하는 WinForm"에서 "PHP 웹 서비스를 통해 DB2에 액세스하는 WinForm"으로 포팅되었습니다.

(PHP는 Linux에서 실행될 수 있고 Linux는 무료라는 장점이 있습니다.)

이 제안의 어려움은 DB2에 액세스하는 것이 아니라 .NET에서 PHP의 웹 서비스를 호출하는 것입니다. 오랫동안 .NET을 사용해 왔고, 항상 .NET만이 웹 서비스를 할 수 있다고 생각해온 저에게는 이것이 정말 조금 어려운 일입니다.

하지만 문제는 아직 해결해야 하고 마감 기한이 코앞으로 다가왔습니다. 몇 가지 조사 끝에 마침내 단서를 얻었고 이제 이를 여러분과 공유합니다.

우선 PHP 서버에는 WSDL 파일과 PHP 파일이라는 두 가지 이상의 파일이 필요합니다. WSDL 파일은 WebService에서 제공하는 서비스 및 호출 방법을 설명하는 데 사용되는 기계 판독 가능한 XML 파일입니다(.NET의 경우 호출 코드가 자동으로 생성되므로 사용하기가 매우 쉽습니다). 웹 서비스.

1) PHP 서버측 코드

1-1) TestWebService.php 코드

인용된 내용은 다음과 같습니다.

class TestWebService
{
공용 함수 HelloWorld()
{
return array("HelloWorldResult"=>"Hello");
}

공용 함수 GetArray( $ args) {
/*
문이 선언될 때 웹 서비스 메서드는 하나 이상의 매개 변수라는 점에 유의하세요.
(매우 혼란스럽습니다. 이 메소드를 호출하면 시스템이 모든 매개변수를 객체에 넣고 이를 전달한다는 것입니다.) value1 = $args->value1

//The 반환 값도 매우 특별합니다. $arry를 직접 반환하는 대신 객체에 넣어 반환합니다.
        return array("GetArrayResult"=>$arry);

    }

}

//WebSevice 인스턴스 만들기
$server = new SoapServer("TestWebService.wsdl" ) ;

//클래스 이름 지정

$server->setClass("TestWebService");

$server->handle();

?>




1-2) TestWebService.wsdl 코드

인용된 내용은 다음과 같습니다.



 
         
       
     

     
       
         
           
         

       

     

     
       
         
           
           
         

        & lt;/s : element & gt;
& lt; s : 요소 이름 = "getArrayReSponse"& gt;
& lt; s : complextype & gt; & lt; s:element minOccurs="0" maxOccurs="1" name="GetArrayResult" type="tns:ArrayOfString" />
         
       

     

     
       
         
       

     

   

 

 
   
 

 
   
  < ;/wsdl:message>
 
   
 
 
   
 
 
   
     
     
   
   
     
     
   

 

     
   
     
     
       
     

     
       
     

   
   
     

       
     

     
       
     

   
 

 
   
   
     
     
       
     

     
       
         

   
     
     
       
     

     
       
     

   
 

  < wsdl:service name="TestWebService">
   
     
   

   
     
   

 


WSDL 코드는 메소드가 많을 경우 손으로 코드를 입력하는 것이 불가능합니다. .NET을 사용하여 실제 메서드 본문 없이 웹 서비스를 구현한 다음 http://***/TestWebService.asmx?를 사용하는 영리한 방법이 있습니다. wsdl 메소드는 wsdl 코드 파일을 생성합니다.

WSDL 파일과 관련하여 두 가지 특별한 점을 설명하고 싶습니다.

(1) Soap:address 노드는 WebService가 선언된 주소이며, 반드시 다음 노드로 변경되어야 합니다.

(2) 1차원 배열의 선언된 유형은 ArrayOfType이고, 문자열 배열의 선언된 유형은 ArrayOfString입니다. Type이 단순 타입이 아닌 경우 Type을 별도로 선언해야 합니다.

2) .NET 클라이언트 코드

먼저 웹 참조를 추가합니다. 주소는 WSDL 파일의 HTTP 주소입니다.

호출 코드(C#)

인용 내용은 다음과 같습니다.

                                              >                  ;



요약: (1) PHP 약한 유형의 언어이므로 오류를 확인하기가 어렵습니다. 배열 유형도 일반적으로 이해되는 배열과 다릅니다. 또한 Hashtable과 유사한 사용법을 갖습니다.

(2) PHP 웹 서비스 메소드는 실제로 호출될 때의 매개변수와 반환값이 모두 패키징되어 객체에 전송되기 때문에 최대 1개의 매개변수와 반환값을 가질 수 있습니다.

(3) PHP 웹 서비스는 사용자 정의 유형 및 사용자 정의 유형 배열과 같은 복합 유형도 지원하지만 다중 배열은 지원하지 않습니다.

(4) 반환 값이 여러 개의 2차원 테이블이어야 한다면 표면적으로는 일련의 문자열 배열을 전송할 수 있다고 생각했는데 형식은

[행 수 표 1], [ 표 1의 열 개수], [표 1의 열 이름], [표 1의 열 이름 2], ... [표 1의 열 이름 N], [행과 표 1의 열]

[표 2 행], [표 2 열 번호], [표 2 열 이름 1], [표 2 열 이름 2], ...[표 2 열 이름 N] , [행과 열에 저장된 테이블 2의 값]

… 테이블 M 열 이름 2], … [테이블 M 열 이름 N ], [표 2의 행과 열에 저장된 값]

위는 PHP Web Service를 호출하는 .NET의 일반적인 예입니다. 더 많은 관련 기사는 PHP 중국어 웹사이트(m.sbmmt.com)를 주목해주세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿