我已经为WCF服务设置了一个基本的客户端回调。请参阅下面的示例代码。
使用附加到资源管理器的http过滤器查看时,您可以看到: 1. service1.svc / js正常工作并将正确的java脚本返回给浏览器 2. serrvice1.svc工作并返回正确的json数据。 3.通话很好,使用警报而不是更新div信息我得到了数据。
然后在警报确定之后,页面将从头开始重新加载。
无法理解为什么?有什么想法?
代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Simple_ClientNetwork_Calls.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body >
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="~/WebKit.js" />
</Scripts>
<Services>
<asp:ServiceReference Path="~/Service1.svc" />
</Services>
</asp:ScriptManager>
<script type="text/javascript">
var BedList = null;
var status = null;
//add a window.load handler to init any necessary controls
Sys.Application.add_load(initializeControls);
function initializeControls(e) {
status = $get("status");
}
function testme() {
document.bgColor = "#FF0000";
getBedList();
}
function getBedList() {
iMDsoft.Demo.SimpleService.GetBedList(GetBedListOnSuccess, GetBedListOnFailed);
}
function GetBedListOnSuccess(results, context, methodName) {
var BedList = results
status.innerText = "Complete" + BedList[0].Name;
}
function GetBedListOnFailed(results, context, methodName) {
status.innerText = "GetBedListOnFailed: " + results.get_message();
}
</script>
<button id="button1" onclick="testme();" >TestMe</button>
<div id="status">
</div>
</div>
</form>
</body>
</html>
答案 0 :(得分:0)
不确定这是否也适用于按钮,但至少对于链接,您需要在onclick事件中返回false。试试这个:
<button id="button1" onclick="testme();return false;" >TestMe</button>
答案 1 :(得分:0)
好的,有几件事需要考虑:
确保在Web服务中公开支持Web http的绑定端点:
<endpoint address=""
binding="webHttpBinding"
contract="Namespce.IServiceContract" />
确保您使用.svc
标记中的WebScriptServiceHostFactory工厂:
<%@ ServiceHost
Language="C#"
Debug="true"
Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory"
Service="Namespace.Service1"
CodeBehind="Service1.svc.cs" %>
您正在调用iMDsoft.Demo.SimpleService.GetBedList
函数,但是您是否已验证生成的javascript代理(http://example.com/service1.svc/js
)中是否存在此类函数?例如:
[ServiceContract(Namespace = "http://imdsoft.demo")]
public interface IService1
{
[OperationContract]
string GetBedList();
}
将生成以下javascript代理方法:imdsoft.demo.iservice1.GetBedList