.NET调PHP Web Service的典型例子

解决异构系统之间交互——Web Service Web Service见名之意就是网络上的一些服务,解决的问题就是如何使用这些服务,因为软件的开发有各种各样的语言,利用Java,C#,VB.NET,PHP等等,如何使这些语言编写的程序能够进行互通,彼此相互利用。Web Service就可以解决异构系统的通信的整合。           首先看一下,和WebService一样能够解决异构系统的通信和整合的方案吧:           1,通过XM 阅读详情

最近一个项目由“WinForm直接访问DB2”移植到“WinForm通过PHP Web Service来访问DB2”。

(优点是php可以架在Linux上,而Linux是免费的)

这个命题的难点不是访问DB2,而是.NET调用PHP的Web Service。对于我这个长期作.NET,之前一直以为只有.NET才可以做Web Service……的人来说,真是有点强“聪”所难了。

但是问题还是要解决的,期限就摆在眼前呢。经过一番调查,终于有了眉目,现在分享给大家。

首先要说明的,PHP服务器需要至少需要两个文件——一个WSDL文件和一个PHP文件。WSDL文件是一种机读的XML文件,用于描述WebService提供的服务和调用方法(对于.NET则可以自动生成调用代码,十分好用),php文件就是真正实现的WEB服务了。

1)PHP服务器端代码

1-1)TestWebService.php代码

以下为引用的内容:

<?php
class TestWebService
{
    
public function HelloWorld()
    {
        
return array("HelloWorldResult"=>"Hello");
    }

    
public function GetArray($args)
        {
          
/*
           注意,Web Service的方法在声明时至多一个参数,
            可是在调用该方法时就必须传value1,value2两个参数。
            (这一点十分令人费解,我的理解是,在调用该方法时,系统把所有参数都放到一个对象里传过来的)
          
*/

        
$value1 = $args->value1;  
        
$value2 = $args->value2;//这两句是获取真正的参数
 
        
$arry = array($value1,$value2);

        
//返回值也很特别,不是直接返回$arry,而是把它放到一个对象里再返回。
        return array("GetArrayResult"=>$arry);
    }
}

//创建WebSevice实例
$server = new SoapServer("TestWebService.wsdl");
//指定类名
$server->setClass("TestWebService");

$server->handle();


?>

1-2)TestWebService.wsdl代码

以下为引用的内容:

<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  
<wsdl:types>
    
<s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
      
<s:element name="HelloWorld">
        
<s:complexType />
      
</s:element>
      
<s:element name="HelloWorldResponse">
        
<s:complexType>
          
<s:sequence>
            
<s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult" type="s:string" />
          
</s:sequence>
        
</s:complexType>
      
</s:element>
      
<s:element name="GetArray">
        
<s:complexType>
          
<s:sequence>
            
<s:element minOccurs="0" maxOccurs="1" name="value1" type="s:string" />
            
<s:element minOccurs="0" maxOccurs="1" name="value2" type="s:string" />
          
</s:sequence>
        
</s:complexType>
      
</s:element>
      
<s:element name="GetArrayResponse">
        
<s:complexType>
          
<s:sequence>
            
<s:element minOccurs="0" maxOccurs="1" name="GetArrayResult" type="tns:ArrayOfString" />
          
</s:sequence>
        
</s:complexType>
      
</s:element>
      
<s:complexType name="ArrayOfString">
        
<s:sequence>
          
<s:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="s:string" />
        
</s:sequence>
      
</s:complexType>
    
</s:schema>
  
</wsdl:types>
  
<wsdl:message name="HelloWorldSoapIn">
    
<wsdl:part name="parameters" element="tns:HelloWorld" />
  
</wsdl:message>
  
<wsdl:message name="HelloWorldSoapOut">
    
<wsdl:part name="parameters" element="tns:HelloWorldResponse" />
  
</wsdl:message>
  
<wsdl:message name="GetArraySoapIn">
    
<wsdl:part name="parameters" element="tns:GetArray" />
  
</wsdl:message>
  
<wsdl:message name="GetArraySoapOut">
    
<wsdl:part name="parameters" element="tns:GetArrayResponse" />
  
</wsdl:message>
  
<wsdl:portType name="TestWebServiceSoap">
    
<wsdl:operation name="HelloWorld">
      
<wsdl:input message="tns:HelloWorldSoapIn" />
      
<wsdl:output message="tns:HelloWorldSoapOut" />
    
</wsdl:operation>
    
<wsdl:operation name="GetArray">
      
<wsdl:input message="tns:GetArraySoapIn" />
      
<wsdl:output message="tns:GetArraySoapOut" />
    
</wsdl:operation>
  
</wsdl:portType>
  
<wsdl:binding name="TestWebServiceSoap" type="tns:TestWebServiceSoap">
    
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
    
<wsdl:operation name="HelloWorld">
      
<soap:operation soapAction="http://tempuri.org/HelloWorld" style="document" />
      
<wsdl:input>
        
<soap:body use="literal" />
      
</wsdl:input>
      
<wsdl:output>
        
<soap:body use="literal" />
      
</wsdl:output>
    
</wsdl:operation>
    
<wsdl:operation name="GetArray">
      
<soap:operation soapAction="http://tempuri.org/GetArray" style="document" />
      
<wsdl:input>
        
<soap:body use="literal" />
      
</wsdl:input>
      
<wsdl:output>
        
<soap:body use="literal" />
      
</wsdl:output>
    
</wsdl:operation>
  
</wsdl:binding>
  
<wsdl:binding name="TestWebServiceSoap12" type="tns:TestWebServiceSoap">
    
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
    
<wsdl:operation name="HelloWorld">
      
<soap12:operation soapAction="http://tempuri.org/HelloWorld" style="document" />
      
<wsdl:input>
        
<soap12:body use="literal" />
      
</wsdl:input>
      
<wsdl:output>
        
<soap12:body use="literal" />
      
</wsdl:output>
    
</wsdl:operation>
    
<wsdl:operation name="GetArray">
      
<soap12:operation soapAction="http://tempuri.org/GetArray" style="document" />
      
<wsdl:input>
        
<soap12:body use="literal" />
      
</wsdl:input>
      
<wsdl:output>
        
<soap12:body use="literal" />
      
</wsdl:output>
    
</wsdl:operation>
  
</wsdl:binding>
  
<wsdl:service name="TestWebService">
    
<wsdl:port name="TestWebServiceSoap" binding="tns:TestWebServiceSoap">
      
<soap:address location="http://localhost/phpmyadmin/ws/TestWebService.php" />
    
</wsdl:port>
    
<wsdl:port name="TestWebServiceSoap12" binding="tns:TestWebServiceSoap12">
      
<soap12:address location="http://localhost/phpmyadmin/ws/TestWebService.php" />
    
</wsdl:port>
  
</wsdl:service>
</wsdl:definitions>

WSDL的代码比较长,当方法很多时,手敲代码是不太可能的。有一个巧的办法,就是也用.NET实现一个不含真正方法体的Web Serivce,然后通过http://***/TestWebService.asmx?wsdl的方法生成wsdl代码文件。

关于WSDL文件,我要说明特别说明两点:

(1)soap:address结点是声明WebService的地址,在部署时要改成相应地址;

(2)一维数组的声明类型为ArrayOfType,字符串数组为ArrayOfString。如果Type不是简单类型,则Type需要另外声明。

2).NET客户端代码

先要添加Web引用,地址为WSDL文件的Http地址。

调用代码(C#)

以下为引用的内容:

        //初始化WebService
        localhost.TestWebService srv = new localhost.TestWebService();
        
//调第一个方法
         string str = srv.HelloWorld();
        
//调第二个方法
         string[] arry= srv.GetArray("string1","string2");

总结: (一)PHP是一种弱类型语言,检查错误比较困难。array类型也与一般理解的数组不同,它也有类似Hashtable的用法。

(二)PHP Web Service方法的传入参数、返回值都至多有一个,因为真正调用时的参数和返回值,都是包装到一个对象中传送的。

(三)PHP Web Service也支持自定义类型和自定义类型数组等复杂类型,但不支持多组数组。

(四)若返回值需要是多张二维表时,我浅薄的以为,可以传化一组字符串数组传送,格式为

[表1行数],[表1列数],[表1列名1],[表1列名2],……[表1列名N],[表1中按行列存放的值]

[表2行数],[表2列数],[表2列名1],[表2列名2],……[表2列名N],[表2中按行列存放的值]

……

[表M行数],[表M列数],[表M列名1],[表M列名2],……[表M列名N],[表2中按行列存放的值]

按顺序将上面[]中的内容串成字符串数组,效率还不错,我测试10000行240列的数据,我有现成编解代码,有兴趣的可以向我索取.

C#调用PHP环境生成的webservice接口的完整例子 打包文件中包括完整的PHP 生成webservice接口的完整代码,同时包括了C# 调用webservice加法接口的例子。 立即下载

相关推荐

C#使用PHP服务端的Web Service通信实例

注:本例中构建Web Service采用SOAP方式,通过php插件NuSoap来搭建SOAP服务器。复制代码 代码如下:<?require_once(“lib/nusoap.php”); //调用NuSoap $server = new soap_server(); //创建soap服务端$server->configureWSDL(“login_service”); //配置WSDL$namespace = “http://www.abcd9.com”; $server->wsdl->schemaTargetNamespace = $namespace; //设置wsdl命名空间为http

C# 调用PHP WebService

新建文件:Finance.php 添加以下代码: /**  * 功能描述:PHP WebService 接口  * 创建人:wzx  * 添加时间:2011-8-30 **/ class Finance {     public function add($

温智星的专栏 7239

PCB工程师必看:别再搞错1078玻纤布的Dk了,手把手教你算等效介电常数

本文为PCB工程师提供了1078玻纤布等效介电常数(Dk)的详细计算指南,帮助解决高速设计中的信号完整性问题。通过解析玻纤布结构、混合介质理论和实战计算方法,指导工程师准确设置EDA工具参数,避免常见的Dk计算误区,提升设计精度和仿真准确性。

weixin_42546392的博客 399

C#调用PHP写的WebService

1.server.php <?php class Result{ function add($a,$b){ return $a+$b; } } ?> 2.kobetest.wsdl <?xml version='1.0' encoding='UTF-8'?> <!-- WSDL file gene...

weixin_34266504的博客 396

多目标优化权衡分析:从 Pareto 前沿到 3 种量化指标(相关系数/膝点/理想点)

本文深入探讨多目标优化中的权衡分析,介绍从Pareto前沿到三种量化指标(相关系数、膝点、理想点)的实用方法。通过Python代码示例和对比分析,帮助读者在工程设计、投资组合等场景中有效评估目标间的Trade-off关系,实现科学决策。

weixin_29032337的博客 392

从统一入口到运营中枢:全面看懂 SAP for Me 的能力边界、使用方式与项目价值

SAP for Me 是 SAP 推出的统一工作平台,旨在整合原本分散在多个系统中的关键信息与操作。它将许可证管理、系统状态、支持工单、维护合同、产品路线图等核心功能集中到一个界面,为不同角色提供定制化视图。平台包含多个功能模块:Home 作为个性化工作台展示待办事项与风险;Calendar 整合各类维护事件与关键时间节点;Reporting 提供跨域分析与趋势洞察;Finance & Legal 管理订单、发票与合规事项;Portfolio & Products 则展示产品全景与路线图。该

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 120

AFSIM 2.9跨平台编译实战:Windows、Linux与麒麟ARM性能优化指南

跨平台编译是仿真框架部署中的常见挑战,涉及编译器兼容性、第三方库依赖和硬件架构差异。其核心原理在于不同平台对C++标准、指令集和系统调用的支持不同,导致同一代码的编译效率和运行性能存在显著差异。技术价值在于通过优化编译参数和依赖管理,可提升仿真计算速度与稳定性。典型应用场景包括国产化平台部署、高性能计算和实时仿真系统。本文以AFSIM 2.9为例,详细解析在Windows、Linux和麒麟ARM平台上的编译链路、性能实测数据及针对ARM架构的优化手段,帮助开发者减少试错成本。

cuibinmo3519的博客 341

OpenStack详解、排错、经验总结

第1章 Openstack简介 1.1 计算(Compute):Nova。 一套控制器,用于为单个用户或使用群组管理虚拟机实例的整个生命周期,根据用户需求来提供虚拟服务。负责虚拟机创建、开机、关机、挂起、暂停、调整、迁移、重启、销毁等操作,配置CPU、内存等信息规格。自Austin版本集成到项目中。 1.2 对象存储(Object Storage):Swift。 一套用于在大规模可扩展系统中通过内置冗余及高容错机制实现对象存储的系统,允许进行存储或者检索文件。可为Glance提供镜像存储,为Cinder提供

weixin_40548182的博客 1974

linux php webservice,.NET调PHP Web Service的典型例子

xmlversion="1.0"encoding="utf-8"?>s:element>s:sequence>s:complexType>s:element>s:sequence>s:complexType>s:element>s:sequence>s:complexType>s:element>s:sequence>s:...

weixin_39890289的博客 61

华为OD机试双机位C卷:采购订单 (Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷 采购订单,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,并提供在线OJ模拟做题。华为OD机试真题【采购订单】

qq_45776114的博客 3534

SAP MM模块后续借记、后续贷记、贷方凭证简介

在SAP系统中,后续借记、后续贷记和贷方凭证是处理供应商发票、采购和付款过程中常见的财务交易。

我小时候很黑的博客 3267

php调用.net服务,.NET调PHP Web Service的典型例子

xmlversion="1.0"encoding="utf-8"?>s:element>s:sequence>s:complexType>s:element>s:sequence>s:complexType>s:element>s:sequence>s:complexType>s:element>s:sequence>s:...

weixin_35158450的博客 153

MATLAB 开发项目实例 1000 例专栏之第37例:基于Simulink的无人机飞行控制系统设计

通过上述项目实例,我们成功地使用Simulink设计和仿真了一个无人机的飞行控制系统。这个项目展示了从无人机建模、路径规划、控制器设计到仿真验证的完整流程。Simulink的可视化和模块化特性使得系统的建模和仿真更加直观和高效。

xiaoheshang_123的博客 163

.net 调用php,一个.NET调用PHP Web Service的典型例子

最近一个项目由"WinForm直接访问DB2"移植到"WinForm通过PHP Web Service来访问DB2”。这个命题的难点不是访问DB2,而是.NET调用PHP Web Service。对于我这个长期作.NET,之前一直以为只有通过.NET调用PHP Web Service……的人来说,真是有点强“聪”所难了。但是问题还是要解决的,期限就摆在眼前呢。经过一番调查,终于有了眉目,现在分享给...

weixin_36047554的博客 295

分布式计算Ray框架:从入门到精通完全教程

想象一下,你有一个机器学习模型要训练,数据集大到让你的笔记本电脑直冒烟;或者你需要并行跑几百个爬虫任务,但线程池和多进程搞得你头晕眼花。传统的单机计算已经hold不住这些场景,分布式计算应运而生。然而,传统的分布式框架(如Hadoop、Spark)要么配置复杂,要么对动态任务支持不佳。这时候,Ray闪亮登场!Ray是一个开源的分布式计算框架,专为高性能、灵活性和易用性而生。它最初由UC Berkeley的RISELab团队开发,目标是让开发者用最少的代码实现分布式任务。无论是数据处理、机器学习,还是仿真任务

大模型大数据攻城狮的专栏 1318

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Web Service 和 Web API

Web Service 严格遵循 SOAP 协议,像一套严谨的“外交文书”系统,通过 XML 信封(SOAP Envelope)和 WSDL 契约书来确保跨语言、跨平台的绝对兼容性,但笨重缓慢;而 Web API 本质上是现代 HTTP 应用的“快递服务”,利用 GET/POST 等标准 HTTP 方法直接传输 JSON 数据,追求轻量、快速,是移动互联网时代前后端交互的主流text/xml。

weixin_46761444的博客 756

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java和.NET互操作:应该放弃Web Service吗

通过WebService混合.NET和Java技术往往很容易,但WebService并非是.NET和Java互操作的万灵丹。WebService在集成独立的跨网络通信的组件时非常有用,在简单的调用/返回情景中,涉及的数据类型数量非常有限,且WebService是基于标准的,混合.NET和Java技术通常显得很简单,因此有人认为WebService是实现.NET和Java互操作的万能答案,...

DLQFHL的博客 215

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

PHP如何向.NET接口webservice发送xml请求

<br />首先,我明白PHP可以使用soapclient 生成实例 调用.NET中暴露的接口方法。<br />PHP向.NET的webservice发送请求,.NET中接口方法的参数是分别写的,PHP中需要将参数当做一个数组。但如果.NET中某个参数是xml字符串,在PHP中怎么写才能正确发送请求呢?<br />请教一下上述代码用PHP实现应该如何写,最关键的就是最后一个参数xml,PHP传参数时必写入数组,但是xml作为数组元素<br />帮我写一段wml代码,通过输入框输入内容补全一个网址,我的发帖记

h57020877的专栏 3424

用php去调用web服务接口,php调用web service接口(.net开发的接口)

实例代码1: try { $this-soapClientObj = new SoapClient(self::URL . '?wsdl', array('connection_timeout' = self::CONNECTION_TIMEOUT)); } catch (Exception $e) { throw new Exception($e-getMessage(), $e-getCode...

weixin_36225637的博客 445

C#调PHP Web Service的案例

最近一个项目由“WinForm直接访问DB2”移植到“WinForm通过PHP Web Service来访问DB2”。 (优点是php可以架在Linux上,而Linux是免费的) 这个命题的难点不是访问DB2,而是.NET调用PHP的Web Service。对于我这个长期作.NET,之前一直以为只有.NET才可以做Web Service……的人来说,真是有点强“聪”所难了。 但是问...

weixin_30456039的博客 102

微软.NET框架下通信技术理解与实践

微软.NET框架下的Remoting和Web Service两项技术的理解以及它们在实际应用中的分析。

m0_65664914的博客 1447
上一篇: DataGridView 加载外部的ComBox
下一篇: PHP WEB SERVICE例子
一点晨辉
博客等级 码龄18年 4粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值