请教大家一个问题,下面是我当前项目中情况描述:

1:我有一个wcf服务方法:init(),里面实现的功能是创建一个线程,然后从远程主机一个端口取socket数据包。

2:这个方法我只需要执行一次,线程开启后就不需要再执行该方法了。

3:我现在解决方案是:把它写在页面加载中,当页面加载时,判断有没有创建该线程,如果没有则创建,有了就不在执行该方法。

问题出现了: 当项目发布到iis后,如果没有一个用户来访问,那么这个线程就永远也不会执行。这不是我期望的,我需要这个线程当iis启动时,就执行。

期望的解决方案:  当iis启动起来,那么这个init()服务方法得到执行。这样就不用写在页面的加载里面了,更不需要去判断。

希望大家帮我解决一下这个疑问谢谢

 

现在的模式就是在App_Start中去实现这个init方法。

1.定义为静态方法。

2.在够着函数里调用这个方法,单例模式。客户端开始的时候调用一次服务。

 

我现在的解决方案就是这样的。先客户端调用一次,之后用户请求,不再调用该方法。

但是现在问题是: 客户端调用是不受我们控制的,那是客户使用的。所以怎么样才能让第一次的客户端调用不让客户来进行。

 

可以考虑 给服务加个自定义 用户名 密码 验证,然后在 这里 调用 你 定义的 那个类的初始化方法

在IIS的进程模型中,如果没有访问请求,IIS不会为特定应用程序启动进程。

所以你必须在第一个请求到达你的服务的时候,去执行Init。

版主提供的方法都可以实现,个人推荐一个更好的方式,就是自定义ServiceHostFactory,在该类中实现调用Init()。

 

 

posted on 2010-06-18 22:27  davidding  阅读(1650)  评论(0编辑  收藏  举报