当前位置: 首页 > news >正文

WCF学习笔记二

  客户端调用WCF服务出现以下错误:

“/”应用程序中的服务器错误。


远程服务器返回错误: (415) Unsupported Media Type。

说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.Net.WebException: 远程服务器返回错误: (415) Unsupported Media Type。

堆栈跟踪: 

[WebException: 远程服务器返回错误: (415) Unsupported Media Type。]
   System.Net.HttpWebRequest.GetResponse() +6449128
   System.ServiceModel.Channels.HttpChannelRequest.WaitForReply(TimeSpan timeout) +55

[ProtocolException: 服务 http://localhost:1234/AreaService.svc 不支持内容类型 text/xml; charset=utf-8。客户端和服务绑定可能不匹配。]

 

  观察堆栈可以知道,这是因为客户端和服务端绑定不匹配造成的,代码如下:

服务端配置节点信息:
<
system.serviceModel> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> <services> <!-- Before deployment, you should remove the returnFaults behavior configuration to avoid disclosing information in exception messages --> <service name="SOA.Services.SearchConfigBiz" behaviorConfiguration="a1"> <endpoint contract="SOA.Contract.ISearchConfig" binding="wsHttpBinding"/> <endpoint contract="SOA.Contract.ISearchConfig" binding="mexHttpBinding" address="mex"/> </service> <service name="SOA.Services.SubjectBiz" behaviorConfiguration="a1"> <endpoint contract="SOA.Contract.ISubject" binding="wsHttpBinding"/> <endpoint contract="SOA.Contract.ISubject" binding="mexHttpBinding" address="mex"/> </service> <service name="SOA.Services.AreaBiz" behaviorConfiguration="a1"> <endpoint contract="SOA.Contract.IArea" binding="wsHttpBinding"/> <endpoint contract="SOA.Contract.IArea" binding="mexHttpBinding" address="mex"/> </service> <service name="SOA.Services.YearBiz" behaviorConfiguration="a1"> <endpoint contract="SOA.Contract.IYear" binding="wsHttpBinding"/> <endpoint contract="SOA.Contract.IYear" binding="mexHttpBinding" address="mex"/> </service> </services> <behaviors> <serviceBehaviors> <behavior name="a1"> <serviceDebug includeExceptionDetailInFaults="true" /> <serviceMetadata httpGetEnabled="true" /> </behavior> <behavior name=""> <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="false" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>

 

客户端配置节点信息:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_SubjectContract" />
<binding name="BasicHttpBinding_AreaContract" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" />
<binding name="BasicHttpBinding_SearchConfigContract" />
<binding name="BasicHttpBinding_YearContract" />
</basicHttpBinding>
<wsHttpBinding>
<binding name="MetadataExchangeHttpBinding_SubjectContract">
<security mode="None" />
</binding>
<binding name="MetadataExchangeHttpBinding_AreaContract">
<security mode="None" />
</binding>
<binding name="MetadataExchangeHttpBinding_SearchConfigContract">
<security mode="None" />
</binding>
<binding name="MetadataExchangeHttpBinding_YearContract">
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:1234/AreaService.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_AreaContract" contract="AreaService.AreaContract"
name="BasicHttpBinding_AreaContract" />
<endpoint address="http://localhost:1234/SearchConfigService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_SearchConfigContract"
contract="SearchConfigService.SearchConfigContract" name="BasicHttpBinding_SearchConfigContract" />
<endpoint address="http://localhost:1234/SubjectService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_SubjectContract"
contract="SubjectService.SubjectContract" name="BasicHttpBinding_SubjectContract" />
<endpoint address="http://localhost:1234/YearService.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_YearContract" contract="YearService.YearContract"
name="BasicHttpBinding_YearContract" />
</client>
</system.serviceModel>

 

所以,只需要将客户端和服务端的配置保持一致即可。

代码如下:

1.使用basicHttpBinding:

客户端配置节点信息:

<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_SubjectContract" />
<binding name="BasicHttpBinding_AreaContract" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" />
<binding name="BasicHttpBinding_SearchConfigContract" />
<binding name="BasicHttpBinding_YearContract" />
</basicHttpBinding>
<wsHttpBinding>
<binding name="MetadataExchangeHttpBinding_SubjectContract">
<security mode="None" />
</binding>
<binding name="MetadataExchangeHttpBinding_AreaContract">
<security mode="None" />
</binding>
<binding name="MetadataExchangeHttpBinding_SearchConfigContract">
<security mode="None" />
</binding>
<binding name="MetadataExchangeHttpBinding_YearContract">
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:1234/AreaService.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_AreaContract" contract="AreaService.AreaContract"
name="BasicHttpBinding_AreaContract" />
<endpoint address="http://localhost:1234/SearchConfigService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_SearchConfigContract"
contract="SearchConfigService.SearchConfigContract" name="BasicHttpBinding_SearchConfigContract" />
<endpoint address="http://localhost:1234/SubjectService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_SubjectContract"
contract="SubjectService.SubjectContract" name="BasicHttpBinding_SubjectContract" />
<endpoint address="http://localhost:1234/YearService.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_YearContract" contract="YearService.YearContract"
name="BasicHttpBinding_YearContract" />
</client>
</system.serviceModel>

服务端配置节点信息:

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"  multipleSiteBindingsEnabled="true" />
    <services>
      <!-- Before deployment, you should remove the returnFaults behavior configuration to avoid disclosing information in exception messages -->
      <service name="SOA.Services.SearchConfigBiz" behaviorConfiguration="a1">
        <endpoint contract="SOA.Contract.ISearchConfig" binding="basicHttpBinding"/>
        <endpoint contract="SOA.Contract.ISearchConfig" binding="mexHttpBinding" address="mex"/>
      </service>
      <service name="SOA.Services.SubjectBiz" behaviorConfiguration="a1">
        <endpoint contract="SOA.Contract.ISubject" binding="basicHttpBinding"/>
        <endpoint contract="SOA.Contract.ISubject" binding="mexHttpBinding" address="mex"/>
      </service>
      <service name="SOA.Services.AreaBiz" behaviorConfiguration="a1">
        <endpoint contract="SOA.Contract.IArea" binding="basicHttpBinding"/>
        <endpoint contract="SOA.Contract.IArea" binding="mexHttpBinding" address="mex"/>
      </service>
      <service name="SOA.Services.YearBiz" behaviorConfiguration="a1">
        <endpoint contract="SOA.Contract.IYear" binding="basicHttpBinding"/>
        <endpoint contract="SOA.Contract.IYear" binding="mexHttpBinding" address="mex"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="a1">
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
使用basicHttpBinding

 

2.使用wsHttpBinding:

客户端配置节点信息:

<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="BasicHttpBinding_SubjectContract" />
<binding name="BasicHttpBinding_AreaContract" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" />
<binding name="BasicHttpBinding_SearchConfigContract" />
<binding name="BasicHttpBinding_YearContract" />
</wsHttpBinding>
<basicHttpBinding>
<binding name="MetadataExchangeHttpBinding_SubjectContract">
<security mode="None" />
</binding>
<binding name="MetadataExchangeHttpBinding_AreaContract">
<security mode="None" />
</binding>
<binding name="MetadataExchangeHttpBinding_SearchConfigContract">
<security mode="None" />
</binding>
<binding name="MetadataExchangeHttpBinding_YearContract">
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:1234/AreaService.svc" binding="wsHttpBinding"
bindingConfiguration="BasicHttpBinding_AreaContract" contract="AreaService.AreaContract"
name="BasicHttpBinding_AreaContract" />
<endpoint address="http://localhost:1234/SearchConfigService.svc"
binding="wsHttpBinding" bindingConfiguration="BasicHttpBinding_SearchConfigContract"
contract="SearchConfigService.SearchConfigContract" name="BasicHttpBinding_SearchConfigContract" />
<endpoint address="http://localhost:1234/SubjectService.svc"
binding="wsHttpBinding" bindingConfiguration="BasicHttpBinding_SubjectContract"
contract="SubjectService.SubjectContract" name="BasicHttpBinding_SubjectContract" />
<endpoint address="http://localhost:1234/YearService.svc" binding="wsHttpBinding"
bindingConfiguration="BasicHttpBinding_YearContract" contract="YearService.YearContract"
name="BasicHttpBinding_YearContract" />
</client>
</system.serviceModel>


服务端配置节点信息:

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<services>
<!-- Before deployment, you should remove the returnFaults behavior configuration to avoid disclosing information in exception messages -->
<service name="SOA.Services.SearchConfigBiz" behaviorConfiguration="a1">
<endpoint contract="SOA.Contract.ISearchConfig" binding="wsHttpBinding"/>
<endpoint contract="SOA.Contract.ISearchConfig" binding="mexHttpBinding" address="mex"/>
</service>
<service name="SOA.Services.SubjectBiz" behaviorConfiguration="a1">
<endpoint contract="SOA.Contract.ISubject" binding="wsHttpBinding"/>
<endpoint contract="SOA.Contract.ISubject" binding="mexHttpBinding" address="mex"/>
</service>
<service name="SOA.Services.AreaBiz" behaviorConfiguration="a1">
<endpoint contract="SOA.Contract.IArea" binding="wsHttpBinding"/>
<endpoint contract="SOA.Contract.IArea" binding="mexHttpBinding" address="mex"/>
</service>
<service name="SOA.Services.YearBiz" behaviorConfiguration="a1">
<endpoint contract="SOA.Contract.IYear" binding="wsHttpBinding"/>
<endpoint contract="SOA.Contract.IYear" binding="mexHttpBinding" address="mex"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="a1">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />
</behavior>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
使用wsHttpBinding

转载于:https://www.cnblogs.com/52XF/p/3740302.html

相关文章:

  • php利用新浪接口查询ip获取地理位置
  • 我的推送架构解决方案
  • Android NDK JNI C++ 13 pthread多线程
  • 铁大课表 详细设计说明书
  • 结合FireBreath在Chrome/FireFox的多进程模式下崩溃一例
  • Java多线程之Wait()和Notify()
  • [java面试]宇信易诚 广州分公司 java笔试题目回忆录
  • 忘记scott密码解决
  • 采集/自动登录啊都可以用这两个方法实现 asp.net
  • windows phone随笔
  • [CLR via C#]11. 事件
  • Welcome to Swift (苹果官方Swift文档初译与注解九)---58~62页(第二章)
  • 高级mask应用
  • 义隆单片机学习笔记之(四) 编程及烧录
  • ASP.NET MD5加密
  • 【译】JS基础算法脚本:字符串结尾
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 2019.2.20 c++ 知识梳理
  • JAVA多线程机制解析-volatilesynchronized
  • Java方法详解
  • js正则,这点儿就够用了
  • Otto开发初探——微服务依赖管理新利器
  • python docx文档转html页面
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Spring Boot MyBatis配置多种数据库
  • SQLServer之索引简介
  • uva 10370 Above Average
  • Vue学习第二天
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 区块链分支循环
  • 王永庆:技术创新改变教育未来
  • 网络应用优化——时延与带宽
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 一道面试题引发的“血案”
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​​​​​​​​​​​​​​Γ函数
  • (1)(1.13) SiK无线电高级配置(六)
  • (4)STL算法之比较
  • (C语言)二分查找 超详细
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (五)MySQL的备份及恢复
  • (转载)利用webkit抓取动态网页和链接
  • .NET delegate 委托 、 Event 事件
  • .NET 回调、接口回调、 委托
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .NET和.COM和.CN域名区别
  • .Net面试题4
  • .NET序列化 serializable,反序列化
  • @vue/cli 3.x+引入jQuery
  • [].slice.call()将类数组转化为真正的数组