跟着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,这样别人想怎么用就怎么用

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

 

posted @ 2011-05-21 22:12  互联网Fans  阅读(696)  评论(2编辑  收藏  举报