WCF新手问题:从JavaScript调用方法

时间:2009-04-03 01:21:55

标签: c# asp.net javascript wcf

问候!

我是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()方法永远不会执行,但我不确定为什么或如何进行故障排除。有什么建议吗?

2 个答案:

答案 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中运行)。