PHP를 통해 C# 웹 서비스를 호출하는 방법은 무엇입니까?
-
07-07-2019 - |
문제
저는 ASP.NET(C#)을 사용하여 웹 서비스를 작성했으며 NuSOAP를 사용하여 예제 PHP 클라이언트를 작성하려고 합니다.제가 실수한 부분은 이를 수행하는 방법에 대한 예입니다.어떤 쇼 soapval
사용 중입니다(그리고 매개변수를 잘 이해하지 못합니다. 예를 들어 통과) false
~처럼 string
유형 등), 다른 사람들은 그냥 직선을 사용하는 반면 array
에스.보고된 대로 내 웹 서비스에 대한 WSDL을 가정해 보겠습니다. http://localhost:3333/Service.asmx?wsdl
다음과 같이 보입니다:
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 시도는 다음과 같습니다.
<?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);
?>
이제 Param 유형이 복잡한 유형이라는 점을 제외하면 내 단순함은 확실합니다. $array
시도가 자동으로 작동하지 않습니다. 웹 서비스에서 중단점을 지정하고 다음과 같이 표시한 메서드를 확인합니다. WebMethod
(이름을 바꾸지 않고 말 그대로 DoSomething
) 인수를 보는 것은 모두 기본값입니다( int
~이다 0
, string
~이다 null
, 등.).
내 PHP 구문은 어떤 모습이어야 하며, PHP 구문을 통과하려면 어떻게 해야 합니까? Param
올바르게 입력하셨나요?
해결책
당신은 물건을 많은 중첩 어레이로 감아 야합니다.
<?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);
?>
다른 팁
관련이 없지만 PHP5부터 SOAP를 기본적으로 지원합니다.
$client = new SoapClient("some.wsdl"); $client->DoSomething($params);
그게 좀 더 편할 수도 있어요.
여기에서 네이티브 비누 지지대가있는 샘플 :
// 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);
Soapclient 설명의 '.../integrationservice/php'는 wcf의 엔드 포인트입니다.
<endpoint
address="php"
binding="basicHttpBinding"
contract="Integration.Service.IDrupalIntegrationService" />