搭建WCF(TCP)服务过程中遇到的各种问题
来源:互联网 发布:中国现货交易平台软件 编辑:程序博客网 时间:2024/05/16 06:23
吐槽一下:就一个简单的搭建TCP服务,结果在客户端引用的时候碰见各种问题,同事评价说“几乎常碰见的问题你都碰见了。。”就为解决这些问题,花费了1个多星期(请不要吐槽菜鸟的效率),在要崩溃的时候终于成功跑通了,这是一个很让你兴奋的事情。。在这里总结一下吧,最少让这段时间没有白白浪费。还有就是
调试很重要,Try……Catch…帮了大忙
1.在 ServiceModel 客户端配置部分中,找不到引用协定“WcfTcpServiceReference.IChaoService”的默认终结点元素。这可能是因为未找到应用程序的配置文件,或者是因为客户端元素中找不到与此协定匹配的终结点元素。
解决方案:这是在分层架构中经常遇到的问题,往往业务逻辑层和UI层是分离的,我们经常在业务逻辑层(我在Bll层)调用的服务引用,在成功后会生成一个app.config文件,其中
<system.serviceModel>···</system.serviceModel>
之中的信息是客户端对应所调用的服务端所生成的配置服务信息。但是在生成发布后往往只会保留UI层的web.config(或者app.config),所以必须在启动项目(UI层)的web.config(或者app.config)文件中加入客户端服务引用生成的app.config中的<system.serviceModel>```</system.serviceModel>
中的内容
2.{“基础提供程序在 Open 上失败。”}
备注:{很可能由 IncludeExceptionDetailInFaults=true 创建的 ExceptionDetail,其值为:
System.Data.Entity.Core.EntityException: 基础提供程序在 Open 上失败。 —-> System.Data.SqlClient.SqlException: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接) —-> System.ComponentModel.Win32Exception: 系统找不到指定的文件。**
解决方案:这种错误往往是因为服务端与数据库连接方面的错误。
我服务端采用了EF6+WCF,当我报这种错误时,在网上搜了很多,我是这么解决的:
打开SQL Server配置管理器, 确保SQL Server实例和SQL Server代理正在运行。。附图:(目的:我服务和数据库都是自己的电脑,这样确保127.0.0.1的远程连接可以用)
【吐槽:这里说下win10中的SQL Server配置管理器被放在了计算管理中,和IIS、服务放在一起。。很蛋疼,附图】确保EF的实体数据模型能够实时的连接数据库
- 确保 表与表之间的关联关系。我是因为用户表与权限表之间存在依赖关系,但只有用户表有数据,所以报错。最终在数据库取消表之间的依赖关系就OK了。
3.部分客户端无法调用WCF服务。提示:服务绑定设置了安全设定,但并未正确设置安全配置。
解决方案:在服务端app.comfig中设定security mode=”None”如下
<bindings> <netTcpBinding> <binding xxxxx /> <security mode="None" /> </binding> </netTcpBinding></bindings>
4.<endpoint address="mex" binding="mexTcpBinding" name="" contract="IMetadataExchange" />
IMetadataExchange是必须要配置的终结点信息。
2种方法:
- 在服务端app.config中的配置
<endpoint address="mex" binding="mexTcpBinding" name="" contract="IMetadataExchange" />
- 在服务宿主程序后台通过代码加载,如下:
ServiceHost SVCHost = new ServiceHost(typeof(DotNet.Mvc.WCF.WcfLibrary.SystemSvc)); ServiceMetadataBehavior SMB = SVCHost.Description.Behaviors.Find<ServiceMetadataBehavior>(); if (SMB == null) { SVCHost.Description.Behaviors.Add(new ServiceMetadataBehavior()); } SVCHost.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding(), "mex"); SVCHost.Open();
还有一些问题,只是文档忘记保存,所以消失了。。。这是教训,得吸取。。
附录一下我服务端的App.config文件,几乎所以得属性我都设置的最大字节数,所以省却了很多麻烦。
<!-- 服务端App.config--> <system.serviceModel> <bindings> <netTcpBinding> <binding name="DPBinding" openTimeout="00:05:00" receiveTimeout="24.00:00:00" sendTimeout="00:05:00" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> <reliableSession inactivityTimeout="24.00:00:00" /> <security mode="None" /> </binding> </netTcpBinding> </bindings> <services> <service behaviorConfiguration="ReleaseSvcBehavior" name="DotNet.Mvc.WCF.WcfLibrary.SystemSvc"> <endpoint address="net.tcp://127.0.0.1:50001/SystemSvc" binding="netTcpBinding" bindingConfiguration="DPBinding" name="" contract="DotNet.Mvc.WCF.WcfLibrary.ISystemSvc" /> <endpoint address="mex" binding="mexTcpBinding" name="" contract="IMetadataExchange" /> <host> <baseAddresses> <add baseAddress="net.tcp://127.0.0.1:50001/SystemSvc" /> </baseAddresses> </host> </service> </services> <behaviors> <serviceBehaviors> <behavior name="ReleaseSvcBehavior"> <!-- 为避免泄漏元数据信息, 请在部署前将以下值设置为 false --> <serviceMetadata httpGetEnabled="false" /> <!--<serviceMetadata httpGetEnabled="false" httpsGetEnabled="True" />--> <!-- 要接收故障异常详细信息以进行调试, 请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息--> <serviceDebug includeExceptionDetailInFaults="true" /> <serviceThrottling maxConcurrentCalls="5000" maxConcurrentSessions="5000" maxConcurrentInstances="5000" /> <dataContractSerializer maxItemsInObjectGraph="6553600" /> </behavior> </serviceBehaviors> <endpointBehaviors> </endpointBehaviors> </behaviors> </system.serviceModel>
最后:闲了2个月,项目组终于要有活了,貌似是Html5+WebSocket。。不过不能半途而废啊。空闲时刻还是要继续我的MVC5+EF6+WCF4的新手旅途。。
- 搭建WCF(TCP)服务过程中遇到的各种问题
- Ceph搭建过程中遇到的各种问题
- 服务过程中会遇到的问题
- 服务过程中会遇到的问题
- 服务过程中会遇到的问题
- hadoop 搭建过程中遇到的问题
- 搭建webservice过程中遇到的问题
- openstack搭建过程中遇到的问题
- 引用wcf服务遇到的问题
- python使用过程中遇到的各种奇怪的问题
- redis集群搭建 以及搭建过程中遇到的问题
- QT安装过程中遇到的各种问题
- Linux使用过程中遇到的各种小问题集合
- 下载Android源码过程中,遇到的各种问题
- Win10 安装过程中遇到的各种问题
- 整理iOS工作学习过程中遇到的各种问题
- 开发过程中遇到的各种问题汇总
- Tensorflow编写过程中遇到的各种小问题汇总
- jquery实现折叠式(手拉风琴)菜单
- 用Qt操作Word文档
- Fixed Function Shader
- 安卓App热补丁动态修复技术介绍
- 亿万.Billions
- 搭建WCF(TCP)服务过程中遇到的各种问题
- Linux第二天01
- Theano学习系列(1):符号变量
- 不成熟的男人的爱情观——知乎上另一个关于不成熟男人的见解
- Java截去字符串中的一段
- 聊聊并发(四)——深入分析ConcurrentHashMap
- Android中对图像进行Base64编码
- Android开发者需要面对的8大挑战
- python学习之数据类型转换及数据操作