WCF web服务在多次重复调用后停止响应

WCF web服务在多次重复调用后停止响应,wcf,iis,Wcf,Iis,我有Windows应用程序,它们通过WCF web服务与逻辑层和数据层通信。 打开表单时,将建立与web服务的连接,并且只要表单打开,连接就保持活动状态。在关闭发件人时,使用web服务上的Finalize和Dispose关闭连接。 在多次打开和关闭表单后,该服务停止响应,我需要重置托管在IIS中的服务以使其重新工作。关于如何处理这个问题有什么提示吗 这是我的服务合同: [ServiceContract] public interface ICommandInvoker : IDisposable

我有Windows应用程序,它们通过WCF web服务与逻辑层和数据层通信。 打开表单时,将建立与web服务的连接,并且只要表单打开,连接就保持活动状态。在关闭发件人时,使用web服务上的Finalize和Dispose关闭连接。 在多次打开和关闭表单后,该服务停止响应,我需要重置托管在IIS中的服务以使其重新工作。关于如何处理这个问题有什么提示吗

这是我的服务合同:

[ServiceContract]
public interface ICommandInvoker : IDisposable
{
    [OperationContract(IsOneWay = false)]
    void Initialize(TypeInfo managerType, UserInfo userInfo, Dictionary<string,string> settingDic);

    [OperationContract(IsOneWay = true)]
    void Finalize();

    [OperationContract(IsOneWay = false, Action="*")]
    //[CustomOperationBehavior]
    ServerResult Execute(ServerCommand command);

    [OperationContract(IsOneWay = false, Name="Execute Serialized")]
    string Execute(string command, TypeInfo typeInfo);

    [OperationContract(IsOneWay = false, Name = "Execute 2 Non Serialized")]
    ServerResult Execute(TypeInfo mangerType, UserInfo userInfo, ServerCommand command);

    [OperationContract(IsOneWay = false, Name = "Execute 2 Serialized")]
    string Execute(TypeInfo mangerType, UserInfo userInfo, string command, TypeInfo typeInfo);

    [OperationContract(IsOneWay = true)]
    void BeginExecute(ServerCommand command);
[服务合同]
公共接口ICommandInvoker:IDisposable
{
[运营合同(IsOneWay=false)]
无效初始化(类型信息管理类型、用户信息用户信息、字典设置DIC);
[运营合同(IsOneWay=true)]
void Finalize();
[运营合同(IsOneWay=false,Action=“*”)]
//[定制操作行为]
ServerResult执行(ServerCommand命令);
[OperationContract(IsOneWay=false,Name=“执行序列化”)]
字符串执行(字符串命令,TypeInfo TypeInfo);
[OperationContract(IsOneWay=false,Name=“执行2非序列化”)]
ServerResult执行(类型信息管理器类型、用户信息用户信息、服务器命令);
[OperationContract(IsOneWay=false,Name=“执行2序列化”)]
字符串执行(类型信息管理器类型、用户信息用户信息、字符串命令、类型信息类型信息);
[运营合同(IsOneWay=true)]
void BeginExecute(ServerCommand命令);
这是我的服务

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class BudgetService : BaseCommandInvoker<BudgetDataContext>, IBudgetService
{
    public BudgetService()
    {
    }
}

[ServiceContract(SessionMode = SessionMode.Required)]
public interface IBudgetService : ICommandInvoker
{
}
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
公共类BudgetService:BaseCommandInvoker,IBudgetService
{
公共预算服务
{
}
}
[ServiceContract(SessionMode=SessionMode.Required)]
公共接口IBudgetService:ICommandInvoker
{
}
您是否有任何使用Wcf方法的示例程序


谢谢

可能会有很多东西

服务器是否返回超时?您如何管理try-catch块?是否引发任何错误。我将检查通道是否出现故障,因为异常将导致通道出现故障。如果出现问题,您的服务应引发FaultExceptions


如果没有更多信息,就不可能真正帮助ant获得更多信息。

我的服务是用InstanceContextMode=InstanceContextMode.Persession修饰的。问题是…?为什么它不工作?您的服务使用的是
手动代理吗?您使用的是哪个版本的IIS?是IIS Express吗?您运行的是Windows Server 2003/2008/../7?m吗y iis版本是7。我在windows 7、2003、2008和Xp中运行我的程序,但在所有情况下都存在问题。在没有响应服务后,服务器最终返回超时。您管理try-catch块的目的是什么?如果我不重复打开和关闭窗体,我的服务工作得很好,因此在频道中没有问题。我提到的目的是try catch blocks是指在调用WCF服务时捕获的顺序很重要。因为FaultException继承自FaultException,所以必须先捕获通用的,否则如果使用错误的顺序,您可能无法获得所需的错误详细信息。在调用完CommunicationException和TimeoutException之后,这将使e您不会“吃掉”您需要的错误。希望这有助于如果您的服务超时,那么我会将矛头指向该服务。可能存在资源争用?在我可以发表更多评论之前,我需要有关该服务的更多详细信息。我没有任何管理处理wcf faultException的尝试捕获的计划。我建议查看iErrorAndrer和为您的服务实施全局错误处理策略。这样,您可以始终确保客户端从您的服务中获得有用的消息。这将有助于跟踪问题,也将有助于您思考您的服务在做什么,我相信这将帮助您编写第一次正确的代码减少这些难以发现和解决的问题。