当前位置:  开发笔记 > 编程语言 > 正文

如何解决"ChannelDispatcher无法打开其IChannelListener"错误?

如何解决《如何解决"ChannelDispatcher无法打开其IChannelListener"错误?》经验,为你挑选了2个好方法。

我正在尝试在Windows服务中托管的WCF和我的服务GUI之间进行通信.问题是我正在尝试执行OperationContract方法

"'net.tcp:// localhost:7771/MyService'中的ChannelDispatcher与合同'"IContract"'无法打开其IChannelListener."

我的app.conf看起来像这样:



    
        
            
                
                    
                
            
        
    
    
        
            
                
                
            
        
    
    
        
            
        
    

端口7771正在侦听(使用netstat检查),svcutil能够为我生成配置.

任何建议,将不胜感激.


从异常堆栈跟踪

Server stack trace: 
   at System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter)
   at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

有一个内部的exeption(但不在Exeption.InnerExeption下但在Exeption.Detail.InnerExeption下 - ToString()方法没有显示)

已经存在URI'net.tcp:// localhost:7771/MyService'的注册.

但是我的服务只在app.config文件中指定了这个URI.在整个解决方案中,此URI在服务器中一次和客户端一次.



1> Nate Zaugg..:

对于这种类型的异常,内部异常具有对诊断问题有用的信息.这是一个相当普遍的错误,可能由一堆不同的东西引起.



2> kyrisu..:

我解决了它:D

以下是问题的解释:

第一个BAD代码:

namespace WCFServer
{
    public class Program : IWCFService
    {
        private ServiceHost host;

        static void Main(string[] args)
        {
            new Program();
        }

        public Program()
        {
            host = new ServiceHost(typeof(Program));

            host.Open();

            Console.WriteLine("Server Started!");

            Console.ReadKey();
        }

        #region IWCFService Members

        public int CheckHealth(int id)
        {
            return (1);
        }

        #endregion
    }
}

如您所见,服务合同是在托管服务的类中实现的.这导致整个错误的事情(也许typeof()运行一个构造函数,我不知道我对这个问题有建设性的意见).

好的代码:

namespace WCFServer
{
    public class Program
    {
        private ServiceHost host;

        static void Main(string[] args)
        {
            new Program();
        }

        public Program()
        {
            host = new ServiceHost(typeof(WCF));

            host.Open();

            Console.WriteLine("Server Started!");

            Console.ReadKey();
        }
    }

    public class WCF : IWCFService
    {

        #region IWCFService Members

        public int CheckHealth(int id)
        {
            return (1);
        }

        #endregion
    }
}

两个文件的服务合同:

[ServiceContract]
public interface IWCFService
{
    [OperationContract]
    int CheckHealth(int id);
}

App.config中



    
        
            
        
    
    
        
            
                
                    
                        
                    
                
            
        
    
    
        
            
        
    

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有