zoukankan      html  css  js  c++  java
  • 跟着Artech学习WCF 省的看书没环境没心情尤其没有看书的环境只有上网的环境

    Artech的 我的WCF之旅(1):创建一个简单的WCF程序

    http://www.cnblogs.com/artech/archive/2007/02/26/656901.html

    以前自己练习WCF是总是通过创建客户端代理类和实现所有东西都是放在创建WCF的项目里面,WCF的地址(Address),绑定(Binding),契约(Contract

    自然也是都在创建 WCF的项目里面,然后客户端创建代理里是调用,觉得真是方便啊,这玩应我看也不用学了 ,和以前的没啥区别,结果看公司的项目的WCF部分和调用WCF部分时, 彻底傻眼,找了N旧都没找见地址(Address),绑定(Binding),契约(Contract),这也没什么,问题是线上的某个WCF总是在某个关键的时刻出问题【例如某NB领导莅临指导检查】事后查看服务器日志 看了半天没搞明白 因为以前的东西没说这个东西会出这样的错误啊 才发现这个东西的确是要学的啊 在WCF上还是菜鸟啊 问题是 公司以后的项目方向是mvc+wcf啊 菜鸟不能不学啊

    Artech 的WCF之旅 除了代码不能复制过来之外 我看很适合学习啊 尤其没有看书的环境只有上网的环境

    我练习的项目结构

    QQ截图未命名2

    首先是WCF的 C 契约(Contract) 是个接口类,这个类可以放在WCF项目里面也可以不放在WCF里面 大多数情况,都是单独拿出来,给server和client调用,所以我们还是拿出来吧,例如我的Contracts类库中的ICalculator.cs 代码如下

     [ServiceContract]
       public interface ICalculator
        {
            [OperationContract]
            string add(double x,double y);
    
        }

    注意啊Contracts.ICalculator 在WCFserver和Client的配置文件中是要用的 例如

     <!-- Service Endpoints WCF服务器端-->
            <endpoint address="" binding="wsHttpBinding" contract="Contracts.ICalculator">
      <!-- clent Endpoints 客户端调用 -->
          <endpoint name="calculatorservice" binding="wsHttpBinding" address=http://localhost:25362/Service1.svc
     contract="Contracts.ICalculator" >

    WCF的c就是这个样子 另外在实现服务接口时我们总是这样

     public class CalculatorService:ICalculator    这样可以生成一些代码,看的多了,
    总以为必须显示的:ICalculator ,但问题是其他部门的接口只一书面形式
    写好了 还没有类库 好焦急啊 其实 这要把每个接口的每个方法都实现了:ICalculator 是可以去掉不用的
    WCF宿主就简单多了创建一个WCF项目 然后按照教程写就行了 配置文件要注意一下contract这个属性是你的接口
    所在的地方
    <!-- Service Endpoints WCF服务器端-->
            <endpoint address="" binding="wsHttpBinding" contract="Contracts.ICalculator">
    MVC调用WCF以前很傻很天真以为可以到处创建代理类,其实项目中用的多的是动态生成的
    代码如下
     public ActionResult Index()
            {
                string result = "";
                using (ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>("calculatorservice"))
                {
    
                    ICalculator proxy = channelFactory.CreateChannel();
                    using (proxy as IDisposable)
                    {
                        result = proxy.add(2, 3);
    
                    }
    
                }
                ViewData["Message"] = "mywcf"+result;
    
                return View();
            }

    配置文件中如下配置

      <system.serviceModel>
        <client>
          <!-- clent Endpoints 客户端调用 -->
          <endpoint name="calculatorservice" binding="wsHttpBinding"
     address=http://localhost:25362/Service1.svc 
    contract="Contracts.ICalculator" >
            
          </endpoint>
        </client>
      </system.serviceModel>

    注意 name="calculatorservice" 是一个名称例如你可以调用N个WCF服务那第N个的名字就是calculatorserviceN

    WCF返回什么好呢?实体对象吗?NO 用的最多的是格式化的XML,这样别人想怎么用就怎么用

    啊第一个教程马马虎虎看完了

     

  • 相关阅读:
    Linux 分卷压缩
    用 virtualenv 创建隔离的 Python 运行环境
    Ubuntu 16.04 安装 Python3.6
    Python 的全局变量
    Git 使用总结
    开源的许可证GPL、LGPL、BSD、Apache 2.0
    Python Unofficial Package Site
    apt-get update 更新 ubuntu时出现Hash sum mismatch的原因及解决方法
    Keep It Simple & Stupid
    Python IDLE 增加清屏功能
  • 原文地址:https://www.cnblogs.com/qqloving/p/2053102.html
Copyright © 2011-2022 走看看