播客 > 玩代码  >  PHP使用.NET的WebService技术范例  | 登录  | RSS订阅地址  | Code平台

PHP使用.NET的WebService技术范例

 Tags:WebService,Soap,ASP.NET,C#,PHP
  
 目前做IT网络这是不同的两层,也是在实际中经常使用的两层,我在下面做个实际的范例,因为在世界中经常有SOAP头等一系列的问题...

  开始创建.NET的WebService类:

namespace Cjjer.Webs{
using System;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web;
using Cjjer;
public class ActorHeader:SoapHeader{//这是一个SOAP头
    public string OASID;
};
[WebService (Name="TestWebServices",Description="测试WebServices",Namespace="http://www.5do8.com/webs/")]
public class Actor:System.Web.Services.WebService{
    public ActorHeader AuthHeader ;

    [WebMethod (EnableSession=true,Description ="GetGUIDNode",MessageName="GetGUIDNode")]
    [SoapHeader ("AuthHeader")]
    [SoapDocumentMethod(ParameterStyle=SoapParameterStyle.Wrapped)]
    public string   GetGUIDNode(string GUID){
        if(!String.IsNullOrEmpty(GUID))GUID=GUID.Trim();

        int statusCode = 200;
        if(!IsValidHeader(AuthHeader)){
            statusCode = 501;
        }
        return statusCode.ToString() + "-" + GUID;
    }
private bool IsValidHeader(ActorHeader aH){
    if(aH==null)return false;
    if(aH.OASID!="Cjjer") return false;
    return true;
}
};
}


  类创建完毕,创建一个asmx文件绑定该类:
<%@WebService Class="Cjjer.Webs.Actor"%>


  然后使用PHP读取,这里加了一个Header,这在非明文传输中,是很有价值的,例如SOAP访问传输中,使用通行证等。。。

  我下面写的是利用PHP5+以上自带支持SOAP扩展的环境写的:


@define('SoapBaseUrl',"http://s:505/");
@define('SoapBaseNameSpace',"http://www.5do8.com/webs/");

$GUID = time();
$client = new SoapClient(SoapBaseUrl."test.asmx?wsdl");
$parameters=array('GUID'=>$GUID);
$auth =array('OASID'=>'Cjjer');
$authvalues = new SoapVar($auth, SOAP_ENC_OBJECT,'ActorHeader',SoapBaseNameSpace);
$header =  new SoapHeader(SoapBaseNameSpace,"ActorHeader", $authvalues, true);
$client->__setSoapHeaders(array($header));
$result=$client->GetGUIDNode(  $parameters);
var_dump($result);


  访问该PHP文件,如果出现;
object(stdClass)#4 (1) { ["GetGUIDNodeResult"]=> string(14) "200-1205411735" }

  200-后面的是目前的time(),200表示通过。如果我们把$auth =array('OASID'=>'Cjjer');这句改成$auth =array('OASID'=>'Cjjer-hi');将出现object(stdClass)#4 (1) { ["GetGUIDNodeResult"]=> string(14) "501-1205411804" },是501...表示soap传输的时候被通过验证。。。。

 好了,举例完毕,提供一下下载吧:
 
点击浏览该文件

  --
谢谢关注。
天气:大雨,ccdot发表于2008-3-13 11:12:12,阅读了1003次,共有个1回复.

不错,学习了。

mojay post in 2008-3-15 14:41:47 #1  
  1. 想要转载我文章的人滚远远的,能想多远,就滚多远。
  2. 不要提交任何带有网址URL信息的评论.
  3. 需要更多信息?请使用站内搜索,郁闷了?听听我在听什么吧!
用户名:*验证:看不清楚请点击刷新验证码*
内容: