绑定“PollingDuplexHttpBinding”不支持创建任何通道类型。这通常表示 CustomBinding 中的 BindingElement 堆栈不正确或者顺序错误。Transport 必须位于堆栈的底部。建议 BindingElement 的顺序是: TransactionFlow、ReliableSession、Security、CompositeDuplex、OneWay、StreamSecurity、MessageEncoding、Transport。
sl5为服务端,
WPF为客户端配置文件信息:
<configuration>
<system.serviceModel>
<client>
<endpoint address="http://localhost:8328/Service.svc" binding="pollingDuplexHttpBinding"
bindingConfiguration="PollingDuplexHttpBinding_IService" contract="TService.IService"
name="PollingDuplexHttpBinding_IService" />
</client>
<extensions>
<bindingExtensions>
<add name="pollingDuplexHttpBinding" type="System.ServiceModel.Configuration.PollingDuplexHttpBindingCollectionElement,System.ServiceModel.PollingDuplex, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</bindingExtensions>
</extensions>
<bindings>
<pollingDuplexHttpBinding>
<binding name="PollingDuplexHttpBinding_IService" duplexMode="MultipleMessagesPerPoll" />
</pollingDuplexHttpBinding>
</bindings>
</system.serviceModel>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
SL客户端可以访问到SL的服务端,但WPF的客户端却访问不到,出现上面的报错信息。(项目都是在一个解决方案下)
@攀 登: PollingDuplexHttpBinding 是 Silverlight 特有的,不支持 WPF。
@Launcher: 不是吧,不是说WPF支持所有的Bangding吗?
@攀 登: 在 4 包括 4 之前都不支持 WPF,之后支不支持,我不知道。看你的测试结果是还是不支持。你可以看下 PollingDuplexHttpBinding 的源码就知道了。
@Launcher: 这我还真没注意,这么说就只能改成wsDualHttpBinding的了。
@攀 登: silverlight 不支持 wsDualHttpBinding,你可以分析下 PollingDuplexHttpBinding,把它移植到 WPF 中去。
@Launcher: 什么意思,没太明白,能不能说的详细些?我是初学者,还不太懂移植
@攀 登: silverlight 不支持 wsDualHttpBinding 这个明白吗?
@Launcher: 这个知道,我的意思是移植这个不太懂
@攀 登: WCF 是个很灵活的框架,其中的很多组件都是可以自定义的,通过对 PollingDuplexHttpBinding 源码的分析,你可以通过自定义的方式来实现同 PollingDuplexHttpBinding 相同的功能。
@Launcher: 太高端了,怕没有那么多的时间
@攀 登: 你跟我说这个有啥用?你咋连问题都不会问呢?我还得在这里帮你想下一个问题该如何问。要是换着我,我会接着问:除了使用自定义的方式,还有别的方式来解决我的问题吗?
然后我就会告诉你:有,但是是一个变通的方式,需要你修改你的服务定义,以及在 WPF 终端中多一些调用逻辑。
http://msdn.microsoft.com/zh-cn/library/ms751515(v=vs.110).aspx
为你的 SilverLight WCF 服务添加两个终结点,一个采用 PollingDuplexHttpBinding ,由 Silverlight 单独使用;一个采用 BasicHttpBinding,由 WPF 或其它类型终端使用。
WPF 调用时,通过定时器机制,在客户端轮询服务的方法,达到 Pooling 的目的。
@Launcher: 谢谢,今天真的是遇到好人了,感谢你的指教,真的很感谢!