C# WCF和Ajax。不允许的方法快把我逼疯了
我正在将ajax连接到wcf服务。但不允许继续获取方法。已经调试了好几天了。我不明白。 我只是在测试默认的GetData(int-value)方法 阿贾克斯: 服务1:C# WCF和Ajax。不允许的方法快把我逼疯了,c#,jquery,ajax,wcf,web-config,C#,Jquery,Ajax,Wcf,Web Config,我正在将ajax连接到wcf服务。但不允许继续获取方法。已经调试了好几天了。我不明白。 我只是在测试默认的GetData(int-value)方法 阿贾克斯: 服务1: public string GetData(String value) { return string.Format("You entered: {0}", value); } 上面没有任何内容公共类服务1:IService1。 上面有一个[ServiceContract
public string GetData(String value)
{
return string.Format("You entered: {0}", value);
}
上面没有任何内容公共类服务1:IService1
。
上面有一个[ServiceContract]
公共接口IService1
我添加了很多东西,删除了很多东西。。我不知道了。
我怀疑它是我的web.config文件,我不明白那部分的意思。你的操作合同表明它是一个post方法,但你是以一个只支持
get
请求的JSONP
请求它的。如果它不是跨域请求,您不需要使用JSONP,只需为您的请求将method设置为Post
,并删除类型。您的响应格式也不是JSON对象。根据您的需要,通过更改契约或更改方法中的返回数据,也可以更改它,然后它就可以工作了
编辑以供注释:
首先,JSONP不是实际的xmlhttprequest对象请求。它所做的是在页面中添加一个脚本标记,该标记具有回调函数,并将请求数据作为参数。主要针对跨域数据共享。JSONP请求返回如下内容
请求URL:domain.com/getJsonp?callback=processJSONP
返回
processJSONP( {
resultList: [{data: "hello"},
{data: "world"}
// and lost of data you need.
]
});
请注意processJSONP,这是页面或库中的函数,可以执行任何您想要的操作
function processJSONP(jsonpResult) {
for(var key in jsonpResult.resultList)
{
//process the data
}
}
如果您确实需要使用POST获取数据,那么它不能是JSONP。它必须是一个AJAX请求,并且必须在同一个域中。在这种情况下,您可以在AJAX请求的success函数中处理数据。好的,2天后,我已经修复了它 以下是我的步骤,感谢所有做出贡献的人
尝试指定
UriTemplate
,它应该类似于WebInvoke(Method=“POST”,UriTemplate=“GetData”)
。另外,jsonp
与json
不一样,因此首先应该在ajax调用中使用数据类型:“json”
。Json的问题是它给了我两个错误:方法不允许,访问控制允许源代码不允许originnull。我刚才做的是将ajax文件移动到wcf项目的根目录下。我收到此错误:“反序列化System.String类型的对象时出错。应为命名空间“”中的结束元素“root”。从命名空间中找到元素“value”
上一个错误的原因是参数的类型不匹配。我不知道如何解决这个问题,但您可以尝试删除或更改合同中的RequestFormat=WebMessageFormat.Json。这很有意义。Json的问题是,它给我提供了访问控制Allow Origin不允许的errors method not allowed和Origin null,而且它必须是POST方法。GET不支持输入参数根据JSONP的定义,它是GET only吗?如果我需要发帖或其他什么呢?有时候一个人从客户那里得到非常奇怪的规格……明白了。所以,基本上,对于CORS,我们只能使用GET,对吗?由于JSONP是跨域调用的“唯一”方法,并且它只能使用GET。。。这感觉有点奇怪,但我相信你的话。
public string GetData(String value)
{
return string.Format("You entered: {0}", value);
}
processJSONP( {
resultList: [{data: "hello"},
{data: "world"}
// and lost of data you need.
]
});
function processJSONP(jsonpResult) {
for(var key in jsonpResult.resultList)
{
//process the data
}
}