如何从php调用我的asp.net Web服务?

时间:2013-02-11 11:16:02

标签: c# php asp.net .net web-services

我在asp.net中创建了一个Web服务并在iis 5.1中发布。现在我想从php环境调用这个Web服务。实际上我的web服务获取一个字符串作为参数并返回相同的字符串。但是一直,返回的字符串为空或null。我无法将字符串值从php发送到asp.net Web服务...

这是我在asp.net中创建的Web服务

namespace PRS_WS
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class prs_point : System.Web.Services.WebService
    {
        [WebMethod]
        public string testAssignment(string inputData)
        {
            return inputData;           
        }
    }
}

而且,这是我调用上述asp.net Web服务的PHP代码......

<?php
       require_once('nusoap/lib/nusoap.php');
       $wsdl="http://localhost/prs_point/prs_point.asmx?WSDL";
       $str1="";
       $str1="Hello from php";

        $client = new soapclient($wsdl,'wsdl');
        $result=$client->call('testAssignment',$str1);

         foreach($result as $key => $value)
        {
              echo "<br/>Response ::::: $value";
         }
?>  

我不知道php端还是asp.net端需要进行哪些更改?...请指导我解决这个问题......

3 个答案:

答案 0 :(得分:6)

这段代码对我来说很好......

<?php

require 'nusoap/lib/nusoap.php';
$client = new nusoap_client('http://localhost/prs_point/prs_point.asmx?WSDL', 'WSDL');


$error = $client->getError();
if ($error) {
    die("client construction error: {$error}\n");
}

$param = array('inputData' => 'sample data');
$answer = $client->call('testAssignment', array('parameters' => $param), '', '', false, true);

$error = $client->getError();
if ($error) {
    print_r($client->response);
    print_r($client->getDebug());
    die();
 }

 print_r($answer);

 ?> 

答案 1 :(得分:0)

试试这个。

$client = new SoapClient("http://localhost/prs_point/prs_point.asmx?WSDL");
$params->inputData= 'Hello';

$result = $client->testAssignment($params)->testAssignmentResult;

echo $result;

答案 2 :(得分:0)

你最好在WCF中定义你的服务,这可以让你更好地控制生成的SOAP,虽然我不确定PHP,但我在过去让ASMX Web服务与Adobe Flex一起工作时遇到了问题因此,尽管仍然使用SOAP协议,但集成并不总是无缝的。除此之外,您的服务看起来还不错,但我不认为您需要这些行:

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]

从PHP方面,您应该能够调用$result = $client -> testAssignment( $str1 );但是(我已经忘记了)您可能需要访问结果值$result = $client -> testAssignment( $str1 ) -> testAssignmentResult;您还必须将参数传递给捆绑在一起的方法数组而不是使用多个参数调用,请参阅this article以获取完整示例。

HTH