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

时间:2011-12-28 17:34:06

标签: wcf c#-4.0 error-handling wcf-client

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

The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it is in the Faulted state.

使用
的服务引发错误 throw new FaultException<DatabaseFault>(new DatabaseFault(e.Message));

我怎样才能处理这种情况,每次都不需要重启客户端和服务?

我正在使用WCF 4.0,C#。

编辑1:我将net.tcp绑定用于WCF服务。

编辑2:我想要一种有效的方式来使用WCF。这与John 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();

我做错了吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

http://blog.tallan.com/2009/05/06/recover-from-a-wcf-service-fault-part-2-generic-serviceclientfactory-class/

我也从diggingforfire回答了一些好的部分。

找到一个可以作为最佳实践here

的好答案