PHP ile bir C # web hizmeti çağırmak nasıl?

3 Cevap

I (C #) ASP.NET kullanarak bir web servisi yazdım ve ben NuSOAP kullanarak bir örnek PHP istemci yazmak çalışılıyor. Bunu yapmak için nasıl örnekler üzerinde takıldı ediyorum nerede; Bazı gösterisi soapval kullanılan (ve oldukça parametreleri anlamıyorum - örneğin false string türleri, vb gibi geçen) Diğerleri sadece iken, düz array s kullanarak. http://localhost:3333/Service.asmx?wsdl gibi bir şey görünüyor tarafından bildirilen gibi benim web hizmeti için WSDL diyelim:

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>

Benim ilk PHP girişimi gibi görünüyor:

<?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);
?>

Şimdi bir kenara Param tip benim basit $array girişimi automagically ile çalışmak olmaz eminim bir karmaşık türü olmaktan, benim web hizmeti breakpointing ve ben {olarak işaretlediğiniz yöntemi görüyorum [(1)]} (yeniden adlandırma olmadan, onun tam anlamıyla DoSomething) ve argümanları tüm varsayılan değerler (int {olan [(4)]}, {[vardır görme (5)]}, vb) [(6)]} {olduğunu.

Ne benim PHP sözdizimi gibi görünmelidir ve ne Param doğru yazmanız geçmek için ne yapmam gerekiyor?

3 Cevap

Sen iç içe diziler ton şeyler kaydırmak zorunda.

<?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);
?>

Sıralama ilgisiz ama PHP5'ta beri SOAP için doğal destek var.

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

O biraz daha uygun olabilir.

http://se.php.net/soap

İşte yerli SOAP desteği ile örnek:

    // 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 açıklamasında nerede '. .. / IntegrationService / php' WCF bitiş noktasıdır:

<endpoint
            address="php"
            binding="basicHttpBinding"
            contract="Integration.Service.IDrupalIntegrationService" />