首页技术soapclient(php SoapClient 是什么)

soapclient(php SoapClient 是什么)

编程之家 2023-11-01 215次浏览

各位老铁们好,相信很多人对soapclient都不是特别的了解,因此呢,今天就来为大家分享下关于soapclient以及php SoapClient 是什么的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

soapclient(php SoapClient 是什么)

php SoapClient 是什么

SOAP:简单对象访问协议,简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML的协议,它被设计成在 WEB上交换结构化的和固化的信息。

PHP5中的这个SOAP扩展目的是为了实现PHP对Web services的支持。与其它实现PHP对Web services的支持的方法不同,SOAP扩展是用C写的,因此它比其它方法具有速度优势。

php SoapClient就是可以基于SOAP协议访问webservice的php客户端。nusoap是一个可以提供Soap访问的类库,下载地址:http://sourceforge.net/projects/nusoap

为什么SoapClient的mssoapinit方法会失败

我在asp.net下构建了一个Web Service-->Service1,其中一个方法TestAddition是得到两个数字的和,但是在asp页面中利用SoapToolkit2.0的创建MSSOAP.SoapClient对象,要用mssoapinit方法初始化失败,Web Service的程序如下:

using System;

using System.Collections;

soapclient(php SoapClient 是什么)

using System.ComponentModel;

using System.Data;

using System.Diagnostics;

using System.Web;

using System.Web.Services;

namespace WebService

soapclient(php SoapClient 是什么)

{

///<summary>

/// Service1的摘要说明。

///</summary>

public class Service1: System.Web.Services.WebService

{

public Service1()

{

//CODEGEN:该调用是 ASP.NET Web服务设计器所必需的

InitializeComponent();

}

#region组件设计器生成的代码

//Web服务设计器所必需的

private IContainer components= null;

///<summary>

///设计器支持所需的方法-不要使用代码编辑器修改

///此方法的内容。

///</summary>

private void InitializeComponent()

{

}

///<summary>

///清理所有正在使用的资源。

///</summary>

protected override void Dispose( bool disposing)

{

if(disposing&& components!= null)

{

components.Dispose();

}

base.Dispose(disposing);

}

#endregion

// WEB服务示例

// HelloWorld()示例服务返回字符串 Hello World

//若要生成,请取消注释下列行,然后保存并生成项目

//若要测试此 Web服务,请按 F5键

// [WebMethod]

// public string HelloWorld()

//{

// return"Hello World";

//}

[WebMethod]

public string TestAddition(int a,int b)

{

int c;

c= a+ b;

return c.ToString();

}

}

}

asp中页面的代码如下:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>

<%

Dim drmSoapClient

Dim res

Const WSDL_URL="http://localhost/WebService/Service1.asmx?wsdl"

Set drmSoapClient= CreateObject("MSSOAP.SoapClient")

drmSoapClient.ClientProperty("ServerHTTPRequest")= true

drmSoapClient.mssoapinit"http://localhost/WebService/Service1.asmx?wsdl","Service1","Service1Soap"

res= drmSoapClient.TestAddition(23,34)

Response.Write(res)

%>

错误信息如下:

Microsoft VBScript编译器错误错误'800a03f6'

缺少'End'

/iisHelp/common/500-100.asp,行242

Server错误'80070057'

WSDLReader:Analyzing the WSDL file failed HRESULT=0x80004005- WSDLReader:Initialization of service failed HRESULT=0x80004005- WSDLService:Initialization of the port for service Service1 failed HRESULT=0x80004005- WSDLPort:Analyzing the binding information for port Service1Soap failed HRESULT=0x80004005- WSDLPort:An operation for port Service1Soap could not be initialized HRESULT=0x80004005- WSDLOperation:Initializing of the input message failed for operation TestAddition HRESULT=0x80004005- WSDLOperation:Initialization of a SoapMapper for operation TestAddition failed HRESULT=0x80004005- SoapMapper:The schema definition for SoapMapper TestAddition could not be found HRESULT=0x80004005

/DRMClient/WebServiceTest/TestAddition.asp,行9

VB通过SoapClient调用WS,怎么设置超时

我们都知道,调用WS可以在工程中添加对WS的WEB引用。

但是,如果我们不想通过添加引用的方式,而是在代码中动态引用该怎么办呢看

首先,我们该想到WS的实现也是一个类的形式。

其次,WS在传输过程中是通过WSDL来进行描述的(使用SOAP协议)。

因此,我们需要获取WS的WSDL描述,并通过该描述来动态生成程序集。

最后:通过反射来获取新生成的程序集,并调用其方法!

上述步骤需要引用如下四个名称空间:

using System.Web.Services.Description;//WS的描述

//以下几个用于根据描述动态生成代码并动态编译获取程序集

using System.CodeDom;

using Microsoft.CSharp;

using System.CodeDom.Compiler;

上述几个名称空间中包括如下几个重要的类:

using System.Web.Services.Description下:

ServiceDescription//WS描述

ServiceDescriptionImporter//通过描述生成客户端代理类,特别注意其中的Style

以下是MSDN对其的

XML Web services的接口通常由 Web服务描述语言(WSDL)文件来说明。例如,若要获取有关使用处公开的 ASP.NET的 Web服务的 WSDL说明,只需导航到?WSDL。使用 ServiceDescriptionImporter类可以方便地将 WSDL说明中包含的信息导入到System.CodeDom.CodeCompileUnit对象。通过调整 Style参数的值,可以指示 ServiceDescriptionImporter实例生成客户端代理类(通过透明调用该类可提供 Web服务的功能)或生成抽象类(该类封装 Web服务的功能而不实现该功能)。如果将 Style属性设置为 Client,则 ServiceDescriptionImporter生成客户端代理类,通过调用这些类来提供说明的 Web服务的功能。如果将Style属性设置为 Server,则 ServiceDescriptionImporter实例生成抽象类,这些类表示所说明的 XML Web services的功能而不进行实现。然后,可以通过编写从这些抽象类继承的类来对其进行实现,并实现相关的方法。

using System.CodeDom下:

CodedomUnit//它用于设定动态代码的名称空间,类名等,可以通过ServiceDescriptionImporter.Import()方法将WS的描述代码写入该类,以作动态编译用

using System.CodeDom.Compiler下:

CodedomProvider//用于创建和检索代码生成器和代码编译器的实例,我们主要用到其实现子类CShareCodeProvider

可以直接用CShareCodeProvider provider=new CShareCodeProvider()来生成,或者用CodedomProvider.CreateProvider("CSharp")来生成

ICodeCompiler//用于编译基于 System.CodeDom的源代码表示形式。

它通过CodedomProvider的CreateCompiler()方法来

CompilerResults//表示从编译器返回的编译结果。它由ICodeCompiler根据指定的编译器设置从指定的 CodeCompileUnit所包含的 System.CodeDom树中编译程序集并返回。CompiledAssembly属性指示编译的程序集。

了解如上信息后,就可动态调用WS了。

文章分享到这里,希望我们关于soapclient的内容能够给您带来一些新的认识和思考。如果您还有其他问题,欢迎继续探索我们的网站或者与我们交流,我们将尽力为您提供满意的答案。

php网站设计,用php制作一个网站 焦点图?什么叫焦点图