zoukankan      html  css  js  c++  java
  • WCF学习笔记:svc、config和code文件之间的关系

    WCF Service重命名之后,在客户端就会出现服务类型找不到的错误。要分析解决这个问题,我们就要从svc、config和code文件之间的关系入手来分析。。。

    新添加一个WCF Service项,命名为OrderService.svc,然后把svc的文件名改成其他的名字,比如OrderProcessorService.svc。编译通过之后,试图从客户端访问这个service的时候,就会报错说找不到这个服务类型,如下:

    The type 'WcfSrvDemo4.OrderService', provided as the Service attribute value in the ServiceHost directive, or provided in the configuration element system.serviceModel/serviceHostingEnvironment/serviceActivations could not be found.

    解决这个问题的方法很简单,但是原因我们要做详细说明。

    首先,打开svc文件,你会发现只有一行像这样的内容:<%@ ServiceHost Language="C#" Debug="true" Service="WcfSrvDemo4.OrderService" CodeBehind="OrderProcessorService.svc.cs" %>。这里有两个重要参数,Service和CodeBehind。编辑状态下,CodeBehind一般不会出错,因为当你修改svc文件的时候,这里会自动更新;但是Service只有在利用重构的方法修改Service类名的的时候才会被更新到,利用其它方法修改类名,这里就会保留原值,所以这里往往是容易出错的地方。

    其次,在运行时,宿主程序从svc文件中的Service属性得到WCF Service的完全限定名,然后从配置文件中找到同名的service,进而找到所有的EndPoint,并根据其属性进行实例化。如果svc文件中的Service属性和配置文件中的Service名字匹配,就无法找到EndPoint以及它的配置信息。

    最后,配置文件中的Service名字必须是Service类名的完全限定名(即Namespace.classname),EndPoint的Contract必须是Service接口的完全限定名。否则,程序就无法从程序集中找到相应的类进行加载。

    明白了svc、config和code文件之间的关系之后,就会很容易在错误出现的时候,很快锁定错误的范围进而解决问题。

     
  • 相关阅读:
    创建二叉树
    并查集
    opn模块
    【ES6】map、reduce、filter、sort、箭头函数、class继承、yield
    css应用视觉设计
    json解决ajax跨域的原理
    flex盒子布局
    前后台交互ajax请求模块
    react后台项目开发(一)
    高阶函数&&高阶组件(二)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2728515.html
Copyright © 2011-2022 走看看