设为首页 收藏本站
查看: 1035|回复: 0

[经验分享] 使用WCF进行跨平台开发之二(IIS托管WCF服务并使用php平台调用)

[复制链接]

尚未签到

发表于 2015-8-13 13:27:54 | 显示全部楼层 |阅读模式
  上一篇中,使用控制台托管了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地址和主机名
DSC0000.png
  这里设置的原因是,第一,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测试服务是否托管正常。
DSC0001.png
  
  出现以上页面,证明在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服务器,访问页面,出结果:
DSC0002.png
  
  下一章将续写java访问WCF服务的具体操作,可是已经到饭点啦。先做个决定。。。。。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-98508-1-1.html 上篇帖子: IIS Web服务扩展中没有Asp.net 2.0 下篇帖子: 手动控制IIS Express的两个常用方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表