• 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文件之间的关系之后,就会很容易在错误出现的时候,很快锁定错误的范围进而解决问题。

     
  • 相关阅读:
    手机端页面自适应解决方案
    每日一算法之拓扑排序
    C++顺序容器类总结
    c++ 运算符优先级
    CUDA获取显卡数据
    第一个CUDA程序
    C++有关类的符号总结
    shell编程的一些例子5
    shell编程的一些例子4
    shell编程的一些例子3
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2728515.html
Copyright © 2020-2023  润新知