使用WCF进行跨平台开发之二(IIS托管WCF服务并使用php平台调用)1.系统必备2.在IIS中托管WCF服务3.使用PHP调用托管在IIS中的WCF服务

上一篇中,使用控制台托管了WCF服务,但是如果想从PHP和java平台调用,必须将其托管到IIS中(并不是必须的,还是有其他的方式的 比如windows azure)

1.系统必备

     首先,必须打开IIS和WAS,如果没有,可以在控制面板--程序--打开或关闭Windows功能打开。

     而后必须的当然是php环境,这就根据您自己的需求配置啦,但是必须注意的是,必须打开php.ini中soap的扩展,步骤是,打开php.ini,搜索php_soap.dll,去掉前面的注释“;”,然后重起php服务器。

2.在IIS中托管WCF服务

     在IIS默认网站中添加应用程序emp,并在高级设置中,设置应用程序池为“ASP.NET v4.0”,并设置默认网站右键--编辑版定,在http类型中编辑IP地址和主机名

这里设置的原因是,第一,php平台在局域网中的另外一台机器上,主机名这里的设置,是因为主机名影响wsdl的生成,如果不设置,在wsdl中生成的location包括的是托管机器名而不是ip地址。

     在新建的虚拟目录对应的实际目录中,添加web.config文件,配置wcf服务和终结点,并打开元数据公开,然而,因为这里不是使用常用的svc文件托管的服务,所以需要serviceActivations节点配置服务,并在服务器行为中打开servicedebug节点的includeExceptionDetailInFaults方便调试。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <serviceHostingEnvironment>
      <serviceActivations>
        <add relativeAddress="EmployeeManagement.svc" service="Implemention.EmployeeManagement"/>
      </serviceActivations>
    </serviceHostingEnvironment>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ExposeMetaDataBehavior">
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="Implemention.EmployeeManagement" behaviorConfiguration="ExposeMetaDataBehavior">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="" contract="Contracts.IEmployeeManagement" />
      </service>
    </services>
  </system.serviceModel>
    <system.webServer>
        <directoryBrowse enabled="true" />
    </system.webServer>
</configuration>

在目录中新建一个bin目录,并复制上一篇中生成的Implemention.dll和Contracts.dll,至此,服务已经托管到了IIS中。

3.使用PHP调用托管在IIS中的WCF服务

在PHP服务器中打开浏览器,并浏览http://192.168.11.1/emp/EmployeeManagement.svc测试服务是否托管正常。

出现以上页面,证明在IIS中托管正常,现在,可以使用php开发程序调用此服务啦。

使用自己喜欢的开发工具编辑一个php页面

GetSalary.php

<html>
 
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
<title>使用PHP调用WCF</title>
</head>
<body>
<form method="post">
<table border="0.5">
    <tr>
        <td>员工ID</td>
        <td><input type="text" id="Id" name="Id"/></td>
    </tr>
    <tr>
        <td>姓  名</td>
        <td><input type="text" id="Name" name="Name"/></td>
    </tr>
    <tr>
        <td>部  门</td>
        <td><input type="text" id="Department" name="Department"/></td>
    </tr>
    <tr>
        <td></td>
        <td><input type="submit" id="submit" name="submit" value="查询"/></td>
    </tr>
</table>
</form>
</body>
</html>
<?php
    try 
    {
        if($_POST)
        {
            $client=new SoapClient("http://192.168.11.1/emp/EmployeeManagement.svc?wsdl");
            //php使用以数组的字符串下标对应.net的属性名称
            $params=array();
            $params["Id"]=$_POST["Id"];
            $params["Name"]=$_POST["Name"];
            $params["Department"]=$_POST["Department"];
            //这里使用emp,因为在我们定义服务契约时,使用的是emp这个形参
            //传入的依然是一个数组,键名是行参名,键值为以上构造的数组
            $response=$client->GetSalaryOfLastMonth(array("emp"=>$params));
            $result=$response->GetSalaryOfLastMonthResult;
            
            
            echo "上月薪水为:".$result->Salary;
        }
        
    }
    catch (Exception $ex)
    {
        echo $ex->getMessage();
    }
?>

开启php服务器,访问页面,出结果:

下一章将续写java访问WCF服务的具体操作,可是已经到饭点啦。先做个决定。。。。。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

40张步骤截图教你用腾讯云服务器配置LNMP环境并安装wordpress

? 作者:liuxinig 来源: http://www.cnblogs.com/liuxinig/p/5928361.html 本文有点长,原因是每一步都有...

1.2K8
来自专栏崔庆才的专栏

分布式爬虫的部署之Scrapyd批量部署

2483
来自专栏用户画像

windows 安装mongo数据库&注册mongo服务

https://www.mongodb.com/download-center?jmp=nav#community

991
来自专栏Java帮帮-微信公众号-技术文章全总结

Nginx+Tomcat关于Session的管理【面试+工作】

解决办法安装epel:EPEL是企业版 Linux 附加软件包的简称,EPEL是一个由Fedora特别兴趣小组创建、维护并管理的,针对 红帽企业版 Linux(...

1902
来自专栏pangguoming

MongoDB 备份(mongodump)与恢复(mongorestore)

MongoDB数据备份 在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。 mongodump命令可...

5475
来自专栏云计算

在Heroku上部署Node.js

今天,我们将演示如何在Heroku上部署Node.js应用。Heroku官方提供免费帐户使用,在此之上,我们最多可以托管5个应用程序。但如果你有大量需求的话,就...

4378
来自专栏腾讯云容器服务团队的专栏

使用腾讯云容器服务搭建 ELK 日志系统

目前主流的分布式日志系统有ELK,flume,fluentd,splunk等,本文利用腾讯云容器服务搭建ELK系统收集nginx的访问日志 ,搭建过程中共搭建4...

2.3K3
来自专栏IT笔记

rsync+inotify实现分布式集群部署

上一篇:Linux下使用ssh密钥实现无交互备份 上二篇:Linux下使用rsync实现文件备份 缘起 由于公司要对支付做压测,于是使用了公司的服务器搭建了一个...

4545
来自专栏跟着阿笨一起玩NET

WCF服务部署到IIS上,然后通过web服务引用方式出现错误的解决办法

本文转载:http://www.cnblogs.com/shenba/archive/2012/01/06/2313932.html

1821
来自专栏腾讯大数据的专栏

Ta 腾讯分析添加热点图

1、打开TA:http://v2.ta.qq.com/ QQ号登录 2、点选站点列表 ? 3、选择新增站点,输入域名点击添加即可。 ? 4、点选监控检测→页面热...

4798

扫码关注云+社区

领取腾讯云代金券