zoukankan      html  css  js  c++  java
  • WCF小试

    1、创建WCF

        右键解决方案-新建项目-WCF服务应用程序。

        创建后会生成一些文件,其中IService.cs是服务的接口,只有在接口中定义的方法才能被外部调用,Service.svc是我们的服务名称,Service.svc.cs是服务代码所在文件,继承自IService.cs。

    2、写服务代码

     由于Service.svc.cs继承自IService.cs接口,所以在写方法之前需要先在IService.cs接口中添加方法。

       比如这里添加一个DataSet GetData(int value);方法。方法前面要加OperationContract标签。

    [OperationContract]
    DataSet GetData(int id);

       然后在Service.svc.cs文件中实现这个方法。

    public DataSet GetData(int id)
    {
          try
          {
               SqlParameter[] pms = { new SqlParameter("@UserId",id)};
               Entities db = new Entities();
               List<User> user = db.User.SqlQuery("exec sp_GetUser @UserId",pms).ToList();
               //string sql = "exec sp_GetUser @UserId";
               //DataSet ds = SqlHelper.ExecuteDataSet(sql, pms);
               return SqlHelper.ToDataSet(user);
           }
           catch (Exception ex)
           {
               SqlHelper.WriteErrorLog("Log", ex.Message);
               return null;
            }
    }

       这里我写了两种连接数据库的方式,ADO.NET和EF,用来执行一个存储过程sp_GetUser,该过程搜索出userid等于传入参数的记录。

       除了这些还要在web.config中的system.serviceModel标签中配置WCF的内容(也可以右键web.config文件选择编辑WCF配置,具体可自行百度),如下:

    <system.serviceModel>
        <services>
          <service name="WcfServiceTest.Service1">
            <host>
              <baseAddresses>
                <!-- 部署的地址 -->
                <add baseAddress="http://192.168.113.34:801/" />
              </baseAddresses>
            </host>
            <endpoint address="WCFTest" binding="basicHttpBinding" bindingConfiguration="" contract="WcfServiceTest.IService1" />
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false -->
              <serviceMetadata httpGetEnabled="true" />
              <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
      </system.serviceModel>

       写到这,我们的WCF服务端代码就完成了,直接F5运行项目,即可在本地调试WCF,调试完成后右键Service.svc,选择在浏览器中查看,就可以看到我们的服务了,地址栏中的地址就是我们的服务地址了。

       

    3、部署

       我们的WCF服务是要部署在IIS服务器上的,这一步也是最容易出错的地方。

       右键添加网站,指向我们发布好的文件夹,右侧菜单选择浏览。

       这里要注意几点:

       1、要保证IIS应用程序池的Framework版本和发布的代码版本一致,否则会出错。

       2、IIS中该项目的标识默认是ApplicationPoolIdentity,要设置为NetworkService,否则会出错。

       3、SqlServer中的NetworkService用户要启用,如果没有的话就要自己添加,添加步骤为:

           数据库-安全性-登录名-右键新建登录名-搜索-高级-立即查找-选中NetworkService-确定。然后配置该用户的权限。

           注意这里的NetworkService用户不是我们数据库的登录用户。不影响连接字符串中的uid。

    4、调用

       我们使用WebForm页面来调用部署好的WCF服务。

       创建完项目后,右键添加服务引用,输入我们部署好的服务地址(如http://192.168.113.34:801/Service1.svc),点击转到,即可看到我们的服务名称,点击该服务还能看到可以调用的方法,确定。

       引用完后会多出一个Service References文件夹,里边是我们引用的服务。如图:

       然后在cs文件里使用该服务:

    ServiceReference1.Service1Client sc = new ServiceReference1.Service1Client();

       其中的sc即是我们的服务对象,就可以点出我们想要调用的方法了:

    DataSet ds = sc.GetData(1);

       OK,搞定!

    作者:七步、 出处:http://www.cnblogs.com/dongyu9521/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    UNIX环境下用C语言写静态库与动态库
    C++异常处理
    php 二位数组按某个键值排序
    微信公众号之 code获取
    微信公众号开发第一步token验证
    Nginx下ThinkPHP5的配置方法详解
    ThinkPHP5 在 LNMP 环境下访问出现 HTTP ERROR 500
    php 通过设置session_name 实现控制同意空间内控制多个项目,还有很多其他应用啦
    git 忽略提交某个指定的文件(不从版本库中删除)
    nginx 配置反向代理 (遇见的问题 :单独服务器 多端口,相当于跨域, 获取不到session)
  • 原文地址:https://www.cnblogs.com/dongyu9521/p/6519542.html
Copyright © 2011-2022 走看看