问候!
我是WCF的新手,我认为它与ASP.NET Web服务类似,但我无法从客户端JavaScript调用方法。我的网页表格如下:
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="~/test.js" />
</Scripts>
<Services>
<asp:ServiceReference Path="~/MyService.svc" />
</Services>
</asp:ScriptManager>
</div>
<button onclick="test()">Click Me</button>
</form>
我的服务界面如下所示:
namespace Test
{
[ServiceContract(Namespace = "Test")]
public interface IMyService
{
[OperationContract]
void DoWork();
[OperationContract]
string SayHi();
}
}
这是它的实施:
namespace Test
{
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MyService : IMyService
{
public void DoWork()
{
}
public string SayHi()
{
return "Hello, World!";
}
}
}
最后是JavaScript:
function test() {
Test.MyService.SayHi(SayHiSuccess, SayHiError);
}
function SayHiSuccess(result) {
alert(result[0]);
}
function SayHiError(error) {
alert(error.toString());
}
看起来该服务的SayHi()方法永远不会执行,但我不确定为什么或如何进行故障排除。有什么建议吗?
答案 0 :(得分:3)
您没有发布您的web.config内容。你使用什么装订?您应该使用webHttpBinding
。
此外,了解.svc文件内容可能会有所帮助。虽然我从未尝试过,但我知道如果您使用WebScriptServiceHostFactory
作为服务主机工厂,则根本不需要修改web.config。这就像修改.svc文件一样简单:
<%@ ServiceHost Service="MyService"
Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory"
%>
如果一切都失败了,这里有一些资源供您使用:
答案 1 :(得分:0)
您的代码看起来不错。应该是正确的。您也可以尝试添加WebService和WebMethod属性。
对于调试WCF Web服务,我通常使用Fiddler来跟踪HTTP调用,同时运行附加调试器的WCF代码(在大多数情况下在Visual Studio中运行)。