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'"

 

posted @ 2019-04-09 15:50  quanzhan  阅读(607)  评论(0编辑  收藏  举报