启用Ajax的WCF服务是否可以将DataTable作为Sys.Data.DataTable传回?

时间:2008-12-17 23:49:47

标签: .net asp.net wcf asp.net-ajax

启用Ajax的WCF服务是否可以将DataTable作为Sys.Data.DataTable传回? 与this类似,但在WCF中。

我的OperationContract看起来像:

    [OperationContract]
    public DataTable GetEmployees()
    {
        NorthwindService ns = new NorthwindService();
        return ns.GetEmployees();
    }

通过Firefox错误控制台,我收到消息:
错误:找不到元素
源文件:http://localhost:4845/TestWcfAjax/SomeService.svc/GetEmployees

如果我在浏览器中输入此URL(上图),我会得到:
方法不允许。

我有另一种方法只返回一个通过WCF / ASP.NET Ajax工作的字符串 思考?想法疑难解答?

后面的代码中没有代码 修改/添加代码:
代码没有弄清楚如何以可读的方式粘贴代码 代码位于此处:
http://www.mirc.org/paste/92

1 个答案:

答案 0 :(得分:3)

您收到Method not allowed错误,因为Web服务调用的默认HTTP谓词是POST,当您只在Web浏览器中键入URL时,动词是GET。使用HTTP调试工具(如Fiddler)来模拟POST请求。还显示调用此服务的代码,以便我们可以看到问题。

PS。同样根据我的记忆,我认为你不能只从Web服务调用返回一个DataTable,你需要将它放在一个DataSet中,这样它才能正确序列化。

  

好的,我认为GET动词是一个   问题。任何允许GET请求的方式   进行故障排除有没有   客户端Sys.Data.DataSet?我有   fiddler安装我会试试。 -   Bruno Tyndall(9分钟前)[删除   这个评论]

不,没有客户端DataSet结构,您只需返回XML即可解析。要启用GET而不是POST,请使用以下附加属性修饰您的操作:

[ WebInvoke( Method = "GET", BodyStyle = WebMessageBodyStyle.Bare,
  RequestFormat = WebMessageFormat.Xml,
  ResponseFormat = WebMessageFormat.Xml ) ]