Debugging WCF WSDualHttpBinding的错误消息:无法自动调试服务

Debugging WCF WSDualHttpBinding的错误消息:无法自动调试服务,debugging,wcf-binding,duplex,Debugging,Wcf Binding,Duplex,我目前正在开发一个解决方案,它需要使用Silverlight 3.0和标准.NET应用程序作为使用WCF实现的web服务的客户端。Silverlight客户端使用的web服务部分需要双工功能,因此我在服务的一个端点上使用了仍然相当新的PollingDuplexBindingElement。但是,PDBE仅由Silverlight支持,因此我为其他客户端的服务添加了第二个端点,它使用WSDualHttpBinding作为绑定。这些其他客户机实际上并不需要双工,但由于服务器端契约的某些部分需要双工,

我目前正在开发一个解决方案,它需要使用Silverlight 3.0和标准.NET应用程序作为使用WCF实现的web服务的客户端。Silverlight客户端使用的web服务部分需要双工功能,因此我在服务的一个端点上使用了仍然相当新的PollingDuplexBindingElement。但是,PDBE仅由Silverlight支持,因此我为其他客户端的服务添加了第二个端点,它使用WSDualHttpBinding作为绑定。这些其他客户机实际上并不需要双工,但由于服务器端契约的某些部分需要双工,像WSHttpBinding这样的标准单工绑定将无法工作

由于奇怪的Silverlight WCF要求(例如,将HTTP 500故障响应重写为HTTP 200等),我正在通过自定义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更好的neat-o回调!,而.NET/WSDualHttp客户端都可以与服务器进行良好的通信

除了一件事。当我尝试调试应用程序时,Visual Studio在通过WSDualHttp进行第一次单工调用时会弹出以下对话框:

无法自动调试“MyCompany.Service”。无法调试远程过程。这通常表示未在web服务器上启用调试。有关更多信息,请参阅帮助

错误消息不太准确。事实证明,您可以通过任何双工单向调用对web服务进行逐步调试,但不能通过任何单工双向调用

现在,当然,我已经检查并确认我的web.config设置正确,也就是说,它包含以下行:

<compilation debug="true">
我已经为此绞尽脑汁足够长的时间了,我已经准备了一个相当简单的复制程序来演示这个问题。正如我所知道的,当您在IIS中使用WSDualHttpBinding,然后尝试对该服务进行标准的单工调用时,它就会出现

我最初的解决方法是将双工从服务的单工部分中分离出来,在这一点上,一切都正常工作——但代价是在客户端上复制对象模型,这并不理想。所以我把所有的东西都移回了一个服务,但是不能调试任何东西确实是一种痛苦

有没有其他人遇到过这个问题,或者有什么建议

FWIW,我已经在网上发布了差不多相同的问题,没有任何建议,并且我试图打开MS的一个bug,但是再一次,那个季度还没有任何帮助


有什么想法吗?

原来这是一个真正的bug。它应该在VS2010 Beta 2中修复


请看这里:。

无论如何,我最终放弃了在IIS 6上使用WSDualHttpBinding,转而在自托管服务上使用NetTCP。在那里调试没有问题。