我使用this example中的JSON和XML创建AJAX服务。 在service.cs中我做了更改:
[ServiceContract(Namespace = "XmlAjaxService")]
public interface ICalculator
{
...
[WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
int GetTimersCallCount();
}
public class CalculatorService : ICalculator
{
private System.Timers.Timer timer = null;
private int timerCalls = 0;
public CalculatorService()
{
timer = new System.Timers.Timer();
timer.Interval = 1000;
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Start();
}
public int GetTimersCallCount()
{
return this.timerCalls;
}
}
在页面javascript上我这样做:
function GetTimersTick() {
// Create HTTP request
var xmlHttp;
try {
xmlHttp = new XMLHttpRequest();
} catch (e) {
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
alert("This sample only works in browsers with AJAX support");
return false;
}
}
}
// Create result handler
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
document.getElementById("result").value = xmlHttp.responseText;
document.getElementById("statustext").value = xmlHttp.getAllResponseHeaders();
}
}
// Build the operation URL
var url = "service.svc/";
url = url + "GetTimersCallCount";
xmlHttp.open("POST", url, true);
xmlHttp.setRequestHeader("Content-type", "application/json");
xmlHttp.send();
}
但是当我按下这个功能的按钮时,我从服务0开始。出了什么问题?
答案 0 :(得分:0)
原因是您的CalculatorService
课程没有一个单一实例。它会在每次调用该服务时重新创建。
要启用单实例模式,请在服务实现类上使用以下属性:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class CalculatorService : ICalculator { ... }
请注意,使用单实例模式时,可能需要将调用与服务方法同步。在您的具体示例中,这不是必需的,因为您只是在读取和写入32位整数(这是一个原子操作)。