启用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
答案 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 ) ]