C#如何在WCF应用程序的业务逻辑类中的两个方法之间实现标志消息传递系统?
我在C#业务逻辑类中有两个方法。我需要一个标志机制,这样一个方法可以更新标志,而另一个方法将在标志更新时做出反应。下面我将粘贴我的情况,非常简单:C#如何在WCF应用程序的业务逻辑类中的两个方法之间实现标志消息传递系统?,c#,asp.net,wcf,C#,Asp.net,Wcf,我在C#业务逻辑类中有两个方法。我需要一个标志机制,这样一个方法可以更新标志,而另一个方法将在标志更新时做出反应。下面我将粘贴我的情况,非常简单: // BusinessLogic.cs bool photoResizingFinished = false; public int SavePhoto() { while (!photoResizingFinished) { System.Threading.Thread.Sleep(100); Trace.Trace
// BusinessLogic.cs
bool photoResizingFinished = false;
public int SavePhoto() {
while (!photoResizingFinished) {
System.Threading.Thread.Sleep(100);
Trace.TraceInformation("PhotoResizingWorkerRole has not finnished yet.");
} }
public bool UpdateStatus(bool statusUpdate) {
photoResizingFinished = statusUpdate;
return true;
}
上述两种方法位于同一类BusinessLogic.cs中
我唯一需要的是能够让SavePhoto()
在
bool photoresizengfinished
由UpdateStatus(bool statusUpdate)
更新。您可以将该类用作Web服务,并实现在ws完成其工作时调用的回调函数。
示例代码:
<script>
var timerID = setTimeout(CallWS, 1000)//call a js func which calls the WevService
function CallWS()
{
clearTimeout(timerID)//to stop the calling...
WSClassName.WSFuncName(param1,param2,....,callBackSuccess,callBackFailur)
///the param1,param2 are according to the parameter the function is expected to get.
}
function callBackSuccess(result,eventArgs)
{
//When the WS function finished successfuly
//**set flag to true.**
}
function callBackFailur(result,eventArgs)
{
//when error occured in the WS function
alert(result.get_message()).
}
</script>
var timerID=setTimeout(CallWS,1000)//调用调用WevService的js func
函数CallWS()
{
clearTimeout(timerID)//要停止调用。。。
WSClassName.WSFuncName(param1,param2,…,callBackSuccess,callBackFailur)
///param1、param2是根据函数预期获得的参数设置的。
}
函数callBackSuccess(结果、事件参数)
{
//当WS函数成功完成时
//**将flag设置为true**
}
函数调用Failur(结果、事件参数)
{
//WS函数中发生错误时
警报(result.get_message())。
}
如果你需要更多的帮助,请告诉我。。。
祝你好运 您可以尝试使用.NET4中的Task类。它允许您对任务进行排队,因此SavePhoto()代码将等待photoresize()方法完成 如果您想了解更多详细信息,这里有一篇关于任务名称空间的文章:
也许我已经找到了使用多线程单例解决问题的方法 以下是一些实施尝试:
我自己也不完全明白这其中的道理,但我希望没问题。我会像这样改变现状:
bool _photoResizingFinished=false;
bool photoResizingFinished
{
get{return _photoResizingFinished;}
set
{
if(value) SavePhoto();
_photoResizingFinished=value;
}
}
或者,可以在更新bool后调用UpdatePhoto()SavePhoto()。可能是一个更好的解决方案。您有关于这方面的教程或代码示例吗?(我只是一个初学者)我更改了我的答案并添加了一些示例代码。看看它是否对您有帮助并让我知道。谢谢,但我的业务逻辑只是C#,我已上载了一个.txt文件,该文件清楚地解释了我的情况:<>为什么不在函数'UpdateStatus'中简单询问如果(statusUpdate==true),然后调用SavePhoto()。因为“SavePhoto()”会发送照片,以便在Azure worker角色中调整大小。语句“while(!photoresizengfinished)”位于SavePhoto()内。“PhotoSizingFinished”由工作角色在完成照片大小调整后更新。不管怎样,我已经意识到这个主题对我来说有点太复杂了,所以我将保持原样。谢谢您的回复,也很抱歉造成混乱。谢谢你的回复,迈克·帕克希尔,但它真的必须如此复杂吗?实际上,我只想在同一类的两个方法之间共享一个变量。如果我将变量设为静态,我可以这样做,但这不是一个好主意,因为有更多的用户。C#难道没有某种语言结构,可以让我轻松轻松地完成最初文章中描述的任务吗?无论如何,谢谢你的回复,我会仔细考虑一下。这些方法是如何运行的?它们是在同一个实例中运行的,还是你希望它们在不同的实例中运行?你是如何处理线程的?你是在控制线程还是其他人?这只是我在Visual Studio中实现的WCF Azure web角色,我的代码在VS中工作,当时我只是使用了一个静态变量作为标志,但后来我认为这可能是个坏主意,因为多个客户端可以访问该服务,我不希望多个客户端共享同一个静态变量。我只是一个只在VS中实现东西的小学生,所以我一直在寻找比使用静态变量在同一类的两个方法之间进行通信更好的方法。
bool _photoResizingFinished=false;
bool photoResizingFinished
{
get{return _photoResizingFinished;}
set
{
if(value) SavePhoto();
_photoResizingFinished=value;
}
}