我目前正在研究一种解决方案,该解决方案需要使用Silverlight 3.0和标准.NET应用程序作为使用WCF实现的Web服务的客户端。 Silverlight客户端使用的Web服务部分需要双工功能,因此我在服务的一个端点上使用(仍然相当新的)PollingDuplexBindingElement。但是,PDBE仅受Silverlight支持,因此我为其他客户端添加了第二个端点,该端点使用WSDualHttpBinding作为绑定。这些其他客户端实际上并不需要双工,但由于服务器端合同的某些部分需要双工,因此像WSHttpBinding这样的标准单工绑定将不起作用。
由于奇怪的Silverlight WCF要求(例如,重写HTTP 200的HTTP 500错误响应等),我正在通过自定义ServiceFactory类初始化我的服务,其关键部分如下所示:
protected override void InitializeRuntime()
{
// Add the WSDualHttpBinding.
// This should listen at http://<servername>/RoomService.svc/wsdual
WSDualHttpBinding wsDualBinding = new WSDualHttpBinding(WSDualHttpSecurityMode.None)
{
MessageEncoding = WSMessageEncoding.Text,
TextEncoding = new System.Text.UTF8Encoding()
};
this.AddServiceEndpoint(
typeof(IRoomService),
wsDualBinding,
"wsdual");
// Add the PollingDuplexBinding
// This should listen at http://<servername>/RoomService.svc
PollingDuplexBindingElement pollingDuplexBindingElement = new PollingDuplexBindingElement()
{
// I'm not sure that these values are the best. They're an initial guess.
ServerPollTimeout = TimeSpan.FromSeconds(90),
InactivityTimeout = TimeSpan.FromMinutes(30)
};
CustomBinding pollingDuplexBinding = new CustomBinding(
pollingDuplexBindingElement,
new BinaryMessageEncodingBindingElement(),
new HttpTransportBindingElement());
this.AddServiceEndpoint(
typeof(IRoomService),
pollingDuplexBinding,
"").Behaviors.Add(new SilverlightFaultBehavior());
// Add the MetaData Exchange binding.
this.AddServiceEndpoint(
typeof(IMetadataExchange),
MetadataExchangeBindings.CreateMexHttpBinding(),
"mex");
base.InitializeRuntime();
}
(有点令人惊讶的是)一切正常。 Silverlight / PollingDuplex客户端都得到了他们的整齐回调(比SL 2.0好多了!),.NET / WSDualHttp客户端都可以很好地与服务器通信。
除了一件事。当我尝试调试应用程序时,Visual Studio在通过WSDualHttp进行第一次单纯形调用时会抛出以下对话框:
“无法自动调试'MyCompany.Service'。无法调试远程过程。这通常表示尚未在Web服务器上启用调试。有关详细信息,请参阅帮助。”
错误消息不是完全准确。事实证明,您可以通过任何 duplex (单向)调用对Web服务进行逐步调试,但不能通过任何 simplex (双向)调用
现在,当然,我已经检查确认我的web.config已正确设置,即它中包含以下行:
<compilation debug="true">
我一直在反对这个问题,我已经整理了一个相当直接的复制品(可用here)来证明这个问题。据我所知,当你在IIS中使用WSDualHttpBinding,然后尝试针对该服务进行标准的单工调用时,它会显示出来。
我最初的解决方法是从服务的Simplex部分中拆分Duplex,此时一切正常 - 但是以客户端上的重复对象模型为代价,不理想。所以我把所有东西都归还给了一个服务,但是不能调试任何东西肯定是痛苦的。
是否还有其他人遇到此问题或有任何建议?
FWIW,我在MSDN上发布了或多或少的同一个问题但没有任何建议,我试图用MS Connect打开一个错误,但是再一次,还没有任何帮助从那个季度开始。
有什么想法吗?
答案 0 :(得分:0)
原来这是一个真正的错误。它应该在VS 2010 Beta 2中修复。
请参见此处: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=472536&wa=wsignin1.0。