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

时间:2009-07-12 08:39:09

标签: debugging wcf-binding duplex

我目前正在研究一种解决方案,该解决方案需要使用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打开一个错误,但是再一次,还没有任何帮助从那个季度开始。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

原来这是一个真正的错误。它应该在VS 2010 Beta 2中修复。

请参见此处: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=472536&wa=wsignin1.0