如何通过错误处理有效地处理WCF服务

如何通过错误处理有效地处理WCF服务,wcf,c#-4.0,error-handling,wcf-client,Wcf,C# 4.0,Error Handling,Wcf Client,在WCF服务中抛出错误后,我不断收到此错误: 通信对象System.ServiceModel.Channels.ServiceChannel无法用于通信,因为它处于故障状态。 服务使用 抛出新的FaultException(新的DatabaseFault(e.Message)) 我如何处理这个问题,而不需要每次都重新启动客户端和服务 我使用的是WCF 4.0,C# 编辑1:我对WCF服务使用net.tcp绑定 编辑2:我想要一种有效的方式来使用WCF。这与约翰·S所说的无关 编辑3:我的代码有效

在WCF服务中抛出错误后,我不断收到此错误:

通信对象System.ServiceModel.Channels.ServiceChannel无法用于通信,因为它处于故障状态。

服务使用
抛出新的FaultException(新的DatabaseFault(e.Message))

我如何处理这个问题,而不需要每次都重新启动客户端和服务

我使用的是WCF 4.0,C#

编辑1:我对WCF服务使用net.tcp绑定

编辑2:我想要一种有效的方式来使用WCF。这与约翰·S所说的无关

编辑3:我的代码有效。但我认为它没有像它应该的那样运行(它的设计方式)

这是承载我的服务的控制台应用程序:

using (ServiceHost host = new ServiceHost(typeof(AuctionService)))
        {
            Console.WriteLine("AuctionWCF.TestHost Started");
            host.AddServiceEndpoint(
                typeof(IAuctionService),
                new NetTcpBinding(),
                "net.tcp://localhost:9000/AuctionWcfEndPoint");
            host.Open();
            Console.WriteLine("AuctionWCF.TestHost listens for requests");

            Console.ReadLine();
        }
这是客户:

AuctionService = new ChannelFactory<IAuctionService>(
            new NetTcpBinding(),
            new EndpointAddress("net.tcp://localhost:9000/AuctionWcfEndPoint")).CreateChannel();
AuctionService=newchannelfactory(
新的NetTcpBinding(),
新端点地址(“net。tcp://localhost:9000/AuctionWcfEndPoint))创建通道();

我做错什么了吗?

你使用的是ChannelFactory吗?如果是这样,则显示了一个ChannelFactoryManager的示例,该示例对我非常有用。

这是一个非常好的方法,这就是我想要发现的:

我也从diggingforfire的答案中找到了一些好的部分


找到了一个可以作为最佳实践的好答案

这是如何无效的可能重复?另外,我刚刚确定了你的确切问题。为什么你不这么认为?我不想每次打电话给WCF都打开频道。我希望每次都使用相同的频道,如果它无法启动另一个或其他频道。我刚开始使用WCF,我想了解一些关于这个问题的策略建议:首先,让代码正常工作。接下来,让你的代码尽可能快地工作。您正在进行预优化,很可能会使您的代码非常有效地中断。虽然该语句本身是正确的,但我不确定它是否适用于这里。我不会在预优化下分享你的工厂或渠道故障。