• WCF报错


    1、"没有终结点在侦听可以接受消息的 http://localhost:8084/Service1.svc。这通常是由于不正确的地址或者 SOAP 操作导致的。如果存在此情况,请参见 InnerException 以了解详细信息"

    一般是地址写错了,此处的重点在InnerException,发现是连不上"127.0.0.1:8084",所以我的WCF服务端有问题

    正确写法如下(控制台作为宿主):

                //创建宿主的基地址
                Uri baseAddress = new Uri("http://localhost:8084/Service1.svc");         
    
                //创建宿主
                using (ServiceHost host = new ServiceHost(typeof(Service1), baseAddress))
                {                
                    //向宿主中添加终结点
                    //host.AddServiceEndpoint(typeof(IService1), new WSHttpBinding() ,"");
                    System.ServiceModel.Channels.Binding httpbinding = new BasicHttpBinding();
    
                    host.AddServiceEndpoint(typeof(IService1), httpbinding, "");
                    
                    //将HttpGetEnabled属性设置为true
                    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                    smb.HttpGetEnabled = true;               
    
                    //将行为添加到Behaviors中
                    host.Description.Behaviors.Add(smb);
                 
                    //打开宿主
                    host.Open();
                    Console.WriteLine("WCF中的HTTP监听已启动....");
                    Console.ReadLine();                
                    //host.Close();
                }

    2、"服务 http://localhost:8082/Service1.svc 不支持内容类型 text/xml; charset=utf-8。客户端和服务绑定可能不匹配。"

          根据上面那句搜的解决方法都不行,重点还是在InnerException里,说希望类型是'text/xml; charset=utf-8',此时异常的类型是'application/soap+xml; charset=utf-8'

     远程服务器返回错误: (415) Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'.。

    //写WSHttpBinding报错
    host.AddServiceEndpoint(typeof(IService1), new WSHttpBinding() ,"");
    
    
    //当前场景正确调用方式
    System.ServiceModel.Channels.Binding basicHttpBinding = new BasicHttpBinding();
    host.AddServiceEndpoint(typeof(IService1), basicHttpBinding , "");

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

    需要有   webBehavior

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <system.serviceModel>
        <bindings>
        
          <webHttpBinding>
            <binding name="ServiceReference" />
          </webHttpBinding>
        </bindings>
    
        <behaviors>
          <endpointBehaviors>
            <behavior name="webBehavior">
              <webHttp/>
            </behavior>
          </endpointBehaviors>
        </behaviors>
        
        <client>
       
          <endpoint address="http://XXX.XXX.XXX.XXX:8085/Service.svc?wsdl"
             binding="webHttpBinding" bindingConfiguration="GYSFC_ServiceReference" behaviorConfiguration="webBehavior"         
             contract="ServiceReference.IService" name="ServiceReference" />            
          
        </client>
      </system.serviceModel>
    </configuration>

    约定“IService”的操作“ResetPWD”指定要序列化多个请求正文参数,但没有任何包装元素。如果没有包装元素,至多可序列化一个正文参数。请删除多余的正文参数,或将 WebGetAttribute/WebInvokeAttribute 的 BodyStyle 属性设置为 Wrapped。

    参考:

    解决"415 Cannot process the message because the content type 'application/x-www-form-urlencoded' was not the expected type 'text/xml; charset=utf-8'"

  • 相关阅读:
    SQL Server, Timeout expired.all pooled connections were in use and max pool size was reached
    javascript 事件调用顺序
    Best Practices for Speeding Up Your Web Site
    C语言程序设计 使用VC6绿色版
    破解SQL Prompt 3.9的几步操作
    Master page Path (MasterPage 路径)
    几个小型数据库的比较
    CSS+DIV 完美实现垂直居中的方法
    由Response.Redirect引发的"Thread was being aborted. "异常的处理方法
    Adsutil.vbs 在脚本攻击中的妙用
  • 原文地址:https://www.cnblogs.com/code1992/p/10677397.html
Copyright © 2020-2023  润新知