2008-11-10 4 views
3

ASP.NET (C#)을 사용하여 웹 서비스를 작성했으며 NuSOAP을 사용하여 예제 PHP 클라이언트를 작성하려고합니다. 내가 어떻게 넘어 졌는지는이 작업을 수행하는 방법의 예입니다. 일부는 soapval을 사용하고 있습니다 (예를 들어, falsestring 유형으로 전달하는 등 매개 변수를 이해하지 못하는 반면 다른 사람들은 단지 array을 사용하고 있습니다). 나는 '복합 유형 인 파람 유형에서 지금 옆PHP를 통해 C# 웹 서비스를 호출하는 방법은 무엇입니까?

<?php 
require_once('lib/nusoap.php'); 
$client = new nusoap_client('http://localhost:3333/Service.asmx?wsdl'); 

$params = array(
    'anId' => 3, //new soapval('anId', 'int', 3), 
    'action' => 'OMNOMNOMNOM', 
    'parameters' => array(
     'firstName' => 'Scott', 
     'lastName' => 'Smith' 
    ) 
); 
$result = $client->call('DoSomething', $params, 'http://tempuri.org/webservices/DoSomething', 'http://tempuri.org/webservices/DoSomething'); 
print_r($result); 
?> 

:

POST /Service.asmx HTTP/1.1 
Host: localhost 
Content-Type: text/xml; charset=utf-8 
Content-Length: length 
SOAPAction: "http://tempuri.org/webservices/DoSomething" 

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <DoSomething xmlns="http://tempuri.org/webservices"> 
     <anId>int</anId> 
     <action>string</action> 
     <parameters> 
     <Param> 
      <Value>string</Value> 
      <Name>string</Name> 
     </Param> 
     <Param> 
      <Value>string</Value> 
      <Name>string</Name> 
     </Param> 
     </parameters> 
    </DoSomething> 
    </soap:Body> 
</soap:Envelope> 

나의 첫번째 PHP 시도는 다음과 같습니다의이 http://localhost:3333/Service.asmx?wsdl에 의해보고 내 웹 서비스의 WSDL을 가정 해 봅시다은 같이 보입니다 내 간단한 $array 시도가 자동으로 작동하지 않을 것이라고 확신합니다. 웹 서비스에서 중단 점을 표시하고 WebMethod (이름을 바꾸지 않고 문자 그대로 DoSomething)으로 표시된 메소드를보고 인수가 모든 기본값 (int은입니다.3210, stringnull 등).

PHP 구문은 어떻게 생겼으며 Param 유형을 올바르게 전달하기 위해해야합니까?

답변

6

중첩 된 배열로 여러 포장을해야합니다.

<?php 
require_once('lib/nusoap.php'); 
$client = new nusoap_client('http://localhost:3333/Service.asmx?wsdl'); 

$params = array(
     'anId' => 3, 
     'action' => 'OMNOMNOMNOM', 
     'parameters' => array(
       'Param' => array(
        array('Name' => 'firstName', 'Value' => 'Scott'), 
        array('Name' => 'lastName', 'Value' => 'Smith') 
         ) 
    ) 
); 
$result = $client->call('DoSomething', array($params), 
       'http://tempuri.org/webservices/DoSomething', 
       'http://tempuri.org/webservices/DoSomething'); 
print_r($result); 
?> 
+0

감사합니다, 나는이 경험 후에 PHP를 싫어했다. – cfeduke

+1

정말요? 하나의 타사 라이브러리에 대해 PHP를 비난 했습니까? 그건 나쁜 버터 스카치를 먹은 후 아이스크림을 싫어하는 것과 같습니다. – Anthony

3

일종의 관련이 없지만 PHP5 이후에는 SOAP을 기본적으로 지원합니다.

 
$client = new SoapClient("some.wsdl"); 
$client->DoSomething($params); 

좀 더 편리 할 수도 있습니다. 여기

http://se.php.net/soap

1

기본 SOAP 지원 샘플 :

// Create a new soap client based on the service's metadata (WSDL) 
    $client = new SoapClient("http://some.wsdl", 
     array('location' => 'http://127.0.0.100:80/IntegrationService/php')); 

    $params = array(); 
    $params['lead']['Firstname'] = $user->firstname; 
    $params['lead']['Lastname']  = $user->lastname; 
    $params['lead']['Product']  = $product; 
    $params['lead']['JobTitle']  = $user->job_title; 
    $params['lead']['Email']  = $user->mail; 
    $params['lead']['Phone']  = $user->phone; 
    $params['lead']['CompanyName'] = $user->company_name; 
    $params['lead']['City']   = $user->city; 
    $params['lead']['Industry']  = $user->industry; 

    $client->SubmitLead($params); 

'.../IntegrationService/php에'SoapClient 설명에서이 WCF에서 엔드 포인트 :

<endpoint 
      address="php" 
      binding="basicHttpBinding" 
      contract="Integration.Service.IDrupalIntegrationService" /> 
관련 문제