• WCF异常信息


    1、服务“CJ.Demo.Conso.WcfService.EmployeeMngService”有零个应用程序(非基础结构)终结点。这可能是因为未找到应用程序的配置文件,或者在配置文件中未找到与服务名称匹配的服务元素,或者服务元素中未定义终结点。
    <service name="CJ.Demo.Conso.WcfService.EmployeeMngService"> 整个类的路径未设置正确

    2、IIS部署WCF出现‘当前已禁用此服务的元数据发布’
    a)如果用4.0框架需要在IIS中将asp.net版本设置为4.0
    1

    b )出现提示原因分析:当机器上安装了asp.net 2.0和4.0时,需分别建立应用程序池,并在部署虚拟目录时分属于不同应用程序池。

       1) 建立不同应用池
    2
       2) 将4.0虚拟目录应用到4.0的应用程序池
    3

    //name属性值必须置空

    <behavior name="" >
              <!-- 将下列元素添加到服务行为配置中。 -->
              <serviceMetadata httpGetEnabled="true" />
    </behavior>

    3、没有与给定的地址“”匹配的协议绑定。协议绑定在 IIS 或 WAS 配置中的站点级别配置。
    http://blog.csdn.net/jhhja/article/details/6226307
    正确的:address单独放置

    <baseAddresses>
    <add baseAddress="http://localhost:8001/"/>
    </baseAddresses>
    </host>
    <endpoint address="HelloService" binding="wsHttpBinding" contract="WCFService.IHelloService">
    </endpoint>

     

    4、如果在配置中将“system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled”设置为 true,则需要终结点指定相对地址。如果在终结点上指定相对侦听 URI,则该地址可以是绝对地址。若要解决此问题,请为终结点“http://localhost/Service1.svc”指定相对 URI。

    解决方法:

    <endpoint address="" //此处只拿出终结点地址部分
    将终结点address改为空

    原因:

    IIS部署的时候,默认会有一个基地址Baseaddress,这个是根据你WCF服务程序的配置生成的。

    如果你打算提供完成的地址格式,但是这个完整的地址格式 和Baseaddress 不匹配,比如端口不一样,就会出错。

    address换成“”,目的就是使用默认的Baseaddress+“”。避免了你自己设置的和Baseaddress 不匹配的问题。

     

    5、不允许使用此方法

    服务器端方法定义中UriTemplate的路径和客户端访问的方法不一致,必须如下

    服务端: [WebInvoke(UriTemplate = "Add", Method = "POST")]
    客户端:var urlTemp = "http://localhost:3721/EmployeeMngService.svc/Add";
    UriTemplate 的值必须和svc/Add后面的add相同

    6、在 ServiceModel 客户端配置部分中,找不到引用协定“ServiceReference1.IEmployeeMng”的默认终结点元素。这可能是因为未找到应用程序的配置文件,或者是因为客户端元素中找不到与此协定匹配的终结点元素
    ServiceReference1。EmployeeMngClient em = new ServiceReference1.EmployeeMngClient(); 通过添加引用使用服务时,客户端endpoint终结点contract的设置,不是和服务器的contract相同,而是设置为和引用服务相关ServiceReference1.IEmploye1eMngaddress也不能设为和服务端address相同,而要设置为address=http://localhost:3721/EmployeeMngService.svc

    7、此工厂上启用了手动寻址,因此发送的所有消息都必须进行预寻址。

    (这个问题花了我一天时间,网上完全没有解决方案。且服务通过网址访问正常,而通过客户端访问就会出现这个问题,归根结底还是配置问题,暂时不知道为什么这样)

      --报错

        <client>
          <endpoint name="employeeService"
                    address
    ="http://127.0.0.1:3721/employees" 
                
                    binding
    ="webHttpBinding" 
                    contract
    ="Artech.WcfServices.Service.Interface.IEmployees"/>
        </client>

    --正常

     <behaviors>
          <endpointBehaviors>
            <behavior name="webBehavior">
              <webHttp/>
            </behavior>
          </endpointBehaviors>      
        </behaviors>
        <client>
          <endpoint name="employeeService"
                    address
    ="http://127.0.0.1:3721/employees" 
                    behaviorConfiguration
    ="webBehavior"
                    binding
    ="webHttpBinding" 
                    contract
    ="Artech.WcfServices.Service.Interface.IEmployees"/>
        </client>

    8、部署IIS 返回304.1找不到网页
    IIS-->虚拟目录-->应用程序设置-->创建应用程序(执行权限选择【脚本和可执行文件】)、应用程序池选择4.0

  • 相关阅读:
    学会拒绝,把时间用在更重要的事情上
    5G即将到来!我们需要一部怎样的手机呢?
    互联网早期是如何发展起来的?
    程序员需要明白这九件事
    centos7安装出现license information(license not accepted)解决办法
    CentOS6.5下安装MySql5.7.17
    Linux操作系统下MySQL的安装 --转
    SecureCRT_教程--1(windows远程登录linux)
    CentOS-7中安装与配置Tomcat8.5
    CentOS7使用firewalld打开关闭防火墙与端口
  • 原文地址:https://www.cnblogs.com/zhangzt/p/2652340.html
Copyright © 2020-2023  润新知