WCF javascript跨域调用
我是javascript新手,我有一个问题让我很难过 我想在一个页面中添加一个跟踪javascript。此脚本将调用wcf服务来跟踪客户端浏览器信息、访问的页面和时间戳。问题是我在javascript调用中遇到了“405方法不允许”错误。该服务将位于另一个域上。现在我在本地主机上测试这个。该服务运行良好,因为我可以在浏览器的新页面上调用它。你经历过同样的问题吗?我怎样才能解决这个问题 我的javascript代码是: Wcf服务代码:WCF javascript跨域调用,javascript,wcf,Javascript,Wcf,我是javascript新手,我有一个问题让我很难过 我想在一个页面中添加一个跟踪javascript。此脚本将调用wcf服务来跟踪客户端浏览器信息、访问的页面和时间戳。问题是我在javascript调用中遇到了“405方法不允许”错误。该服务将位于另一个域上。现在我在本地主机上测试这个。该服务运行良好,因为我可以在浏览器的新页面上调用它。你经历过同样的问题吗?我怎样才能解决这个问题 我的javascript代码是: Wcf服务代码: [ServiceContract(Name = "Custo
[ServiceContract(Name = "CustomersAssistantService", Namespace = "CustomersAssistantService")]
public interface ICustomersAssistantService
{
[OperationContract]
[WebGet]
string DoWork();
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
string Sum(int n1, int n2);
}
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class CustomersAssistantService : ICustomersAssistantService
{
public string DoWork()
{
return "work done";
}
public string Sum(int n1, int n2)
{
return (n1 + n2).ToString();
}
}
Javascript调用:
function CallWcf1(){
var _I = this;
var url = "http://localhost:58399/CustomersAssistantService.svc/customersAssistantService/";
var methodUrl = _I.serviceUrl + 'dowork';
$.ajax( {
url: methodUrl,
data: '',
type: "GET",
processData: false,
contentType: "application/json",
timeout: 10000,
dataType: "text", // not "json" we'll parse
success:
function(res)
{
if (!callback) return;
// *** Use json library so we can fix up MS AJAX dates
var result = JSON2.parse(res);
// *** Bare message IS result
if (bare)
{ callback(result); return; }
// *** Wrapped message contains top level object node
// *** strip it off
for(var property in result)
{
callback( result[property] );
break;
}
},
error:
function(xhr)
{
if (!error) return;
if (xhr.responseText)
{
var err = JSON2.parse(xhr.responseText);
if (err)
error(err);
else
error( { Message: "Unknown server error." })
}
return;
}
});
}
我做错什么了吗
非常感谢,据我所知,请求WCF必须使用POST方法,因此更改为:
type: "POST",
在AJAX调用中。您将遇到。Ajax请求仅限于与同一来源进行通信;跨域请求通常会被拒绝
根据您的需要,有多种方法:
- 如果您的用户将只使用非常现代的浏览器(因此,不是IE7),那么您可以在服务器上实现。这是W3C的一个标准,允许服务器跨源开放对其资源的访问,但它仅在现代浏览器中受支持。(在IE上,它是受支持的,但不是通过通常的
对象;相反,您必须使用XMLHttpRequest
对象。)XDomainRequest
- 您可以实现一个
- 如果您只想向另一个域发送通知,您可以通过添加具有相关
属性的元素,从该域加载资源(一个src
、一个img
,等等);不过,这意味着您仅限于使用本应用于幂等资源的script
方法GET
脚本元素)。非常感谢。你救了我一天:)