随笔分类 -  WCF

摘要:WCF服务寄宿在IIS中,当设置其“最大工作进程数”>1时,经常会出现服务无法被成功调用客户端异常为System.ServiceModel.Security.MessageSecurityException >System.ServiceModel.FaultException:Type:Syste... 阅读全文
posted @ 2014-05-30 17:59 beta2013 阅读(576) 评论(0) 推荐(0)
摘要:传送至客户端的异常肯定是CommunitionException类型,包括一般的通信过程中出错而引发的CommunicationException类型,System.IdentityModel.Selectors.UserNamePasswordValidator扩展能抛出的System.Servi... 阅读全文
posted @ 2013-12-21 09:33 beta2013 阅读(193) 评论(0) 推荐(0)
摘要:问题为Binding对象设置了OpenTimeout未达到预期的效果。解决 //打开连接 var co = (ICommunicationObject)service; var ar = co.BeginOpen(null, null); if (ar.AsyncWaitHandle.WaitOne(new TimeSpan(0, 0, 5))) { co.EndOpen(ar); ... 阅读全文
posted @ 2012-09-26 10:59 beta2013 阅读(254) 评论(0) 推荐(0)
摘要:WCF端接口 [Description("REST服务测试")] [ServiceContract] public interface IAccountRestService : IRestServiceContract { [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)] List GetAccountDataByGet(); [WebInvoke(Method = "POST")] List GetAccountDataByP... 阅读全文
posted @ 2012-09-05 06:03 beta2013 阅读(656) 评论(0) 推荐(0)
摘要:要点采用WebHttpBinding。加入WebHttpBehavior。若要跨域访问,要设置CrossDomainScriptAccessEnabled属性为true。不要设置其它的,如:JavascriptCallbackBehavior、enableWebScript 、AspNetCompatibilityRequirements等ajax访问时,dataType使用jasonp。只支持GET方式的跨域访问。(可参见AJAXCDR:利用 Flash 完美解决 JavaScript 和 AJAX 跨域 HTTP POST/GET 表单请求)使用Fiddler进行测试服务契约示例 [... 阅读全文
posted @ 2012-08-17 16:16 beta2013 阅读(241) 评论(0) 推荐(0)
摘要:背景客户端与服务端使用WCF建立连接后:1、可能长时间不对话(调用服务操作);2、客户端的网络不稳定。为服务端与客户端两边都写“心跳检测”代码?不愿意。解决设置inactivityTimeout属性:设置KeepAlive值,以保持数据层连接服务端与客户端同时设置此值。在这种情况下:客户端若在30/2=15秒内若未产生任何的调用(即Application Message),则基础架构会自动给服务端发送一个心跳包(即Infrastructure Message,查看WCF日志可以知道,这其实就是一个SequenceAcknowledgement)。而服务端在30秒内未接收到任何调用(Applic 阅读全文
posted @ 2012-08-04 10:43 beta2013 阅读(860) 评论(0) 推荐(0)
摘要:一、元数据即WSDL,描述了服务的细节,以便客户端使用。二、必须为服务配置ServiceMetadata行为,才能为其生成WSDL,才能再使用httpGetEnabled或mex将其公布出去三、这两种方式公布出去的WSDL无区别。但公布的方式有区别1、httpGetEnabled=true,类似的还有httpsGetEnabled=true此方式通过在服务在的URL后加“?wsdl”的方式公布WSDL,可直接通过HTTP访问得到。2、mex此方式以一般的终结点方式公布,支持各种协议:http、tcp、NamedPipe参考:WSDL vs MEX, knockout or tie? 阅读全文
posted @ 2012-07-20 15:35 beta2013 阅读(359) 评论(0) 推荐(0)
摘要:注意若使用不可序列化的数据类型(如在服务端定义object类型的类成员),可能会导致不响应的问题。行为种类契约行为、服务行为、操作行为、终结点行为服务三要素A:服务标识(即逻辑地址)。服务端使用相关的ListenUri(即物理地址)侦听来自客户端的数据,而客户端可通过配置ViaBehavior将数据路由至服务端B:服务实现C:服务能做的事组件信道分发器:消息监听与消息接收,并将接收到的消息发给相应的终结点分发器。侦听地址与信道分发器一一对应。服务端专用信道侦听器:包含在信道分发器中,用于创建信息、监听消息。服务端专用信道工厂:创建信道、发送消息。客户端专用信息管理器:在客户端即为信道工厂;在服 阅读全文
posted @ 2012-07-19 11:27 beta2013 阅读(220) 评论(0) 推荐(0)
摘要:场景描述客户端与服务端安装了相应的证书,并且均为SecurityMode采用了编程式配置,如下所示:运行后,客户端提示如下类似错误:传出消息标识检查失败。所预期的远程终结点的 DNS 标识为“localhost”,但是远程终结点提供的 DNS 请求为“192168168151service”。如果此远程终结点合法,您可以通过在创建通道代理时明确地将 DNS 标识“192168168151service”指定为 EndpointAddress 的“标识”属性来解决此问题。原因分析在服务配置证书后,默认的dns将被替换为证书主题。解决方案只能更改客户端的的DnsIdentity值。本想尝试更改服务 阅读全文
posted @ 2012-07-03 22:48 beta2013 阅读(565) 评论(0) 推荐(0)
摘要:“跨域访问”问题异常信息未能连接到 net.tcp://localhost:4503/IMyService。连接尝试的持续时间为 00:00:00.3300189。TCP 错误代码 10013: 试图以其访问权限所禁止的方式访问套接字。。原因可能是,试图以跨域的方式访问某服务,而该服务的配置不支持跨域访问。您可能需要与服务的所有者联系,以公开通过 HTTP 的套接字跨域策略,并在允许的套接字端口范围 4502-4534 之内承载该服务。解决让客户端能以“http://>:80/clientaccesspolicy.xml”方式访问到跨域访问配置。跨域配置内容 ... 阅读全文
posted @ 2012-06-15 15:13 beta2013 阅读(195) 评论(0) 推荐(0)
摘要:一 现象在“输出-调试”窗口外输出如下异常信息System.ServiceModel.CommunicationException: 套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的。本地套接字超时是“10675199.02:48:05.4775807”。 ---> System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接。 --- 内部异常堆栈跟踪的结尾 --- 在 System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult resul. 阅读全文
posted @ 2012-05-11 10:08 beta2013 阅读(421) 评论(0) 推荐(0)
摘要:一 现象出现服务调用久未返回,VS提示“deadlock”之类的异常信息。二 原因分析属于服务并发管理,包含以下2种:1、客户端回调死锁修改客户端回调实现的回调行为的并发模式[CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]private class Client : IVisitorServiceClient{ //哒哒哒...}也可采用将回调接口的操作行为设为“IsOneWay=true”[ServiceContract]interface IVisitorServiceClient{ [OperationContr 阅读全文
posted @ 2012-05-11 10:05 beta2013 阅读(288) 评论(0) 推荐(0)
摘要:一 需求服务端每次为客户端提供服务调用时,需要知道客户端的标识。客户端如何在每次调用时传递此标识?二 解决客户端static void HandleFactory(ChannelFactory factory){ Debug.Assert(factory != null && factory.Credentials != null); factory.Endpoint.Behaviors.Add(new ClientMessageInspector{ HeaderValue=new []{"哈啰"} });}private class ClientMessa 阅读全文
posted @ 2012-05-08 15:54 beta2013 阅读(495) 评论(0) 推荐(0)
摘要:一 概念 1、内容 证书的发布机构 证书的有效期 证书所有者(Subject) 签名所使用的算法 指纹以及指纹算法 公钥 私钥 2、存储区 3、有效性二 作用 1、增强传输的安全性与消息的完整性 防止消息被查看与篡改 2、保证发信的不可抵赖性三 创建、查看、导入、导出 1、运行命令“makecert -r -pe -n "CN=MyServer" -ss My -sky exchange”,创建并存储证书 2、运行“mmc”命令,弹出“Microsoft管理控制台”窗体。在此进行证书的查看、导入、导出等工作。四 在WCF中使用X.509证书WCF服务端1、需要一个包含私钥的 阅读全文
posted @ 2012-05-07 16:59 beta2013 阅读(201) 评论(0) 推荐(0)
摘要:错误一解决:启动“Net.Tcp Port Sharing Service”服务。错误二解决:一、使用命令“WHOAMI /USER”获取系统当前用户的SID。(通过“WHOAMI /all”命令可获取系统所有用户包括用户组的SID)二、修改“SMSvcHost.exe.config”文件,步骤如下:1 、打开任务管理器2、切换至“进程”选项卡点击“显示所有用户的进程”3、切换至“服务”选项卡找到“NetTcpPortSharing”服务右击选择“转到进程”4、在服务对应的目标进程上右击选择“打开文件位置”5、以“管理员身份”运行“CMD”,再运行“notepad”命令以管理员身份打开“记事本 阅读全文
posted @ 2012-04-07 09:53 beta2013 阅读(720) 评论(0) 推荐(0)
摘要:在Windows Communication Foundation (WCF)中,为了阻止服务的实现细节从服务的安全边界泄露,未知的异常不应该被发送至客服端。在WCF配置中将配置节的includeExceptionDetailInFaults属性的值显式设置为false后(或干脆不设置,因为False是默认值),即可达到此目的。备注:includeExceptionDetailInFaults配置只用于未知的或未被处理的异常。对已知的异常(标有FaultContract特性的operation在其实现中抛出的FaultException类型的异常)无效。“异常保护”用于当一个异常被抛出时阻止其 阅读全文
posted @ 2012-03-27 14:41 beta2013 阅读(171) 评论(0) 推荐(0)