从jQuery调用WCF服务有什么问题?

时间:2011-11-01 01:40:39

标签: jquery wcf web-services .net-4.0

此功能连接到按钮的点击事件:

function BlahBlahBlahWCFXML() { 
    varType = "POST"; 
    varUrl = "http://123.123.123.123/NameOfService.svc/GetStuffById"; 
    varData = '{"stuffId": "' + 12345678-abcd-9012-3456-abcdefghjkl' + '"}'; 
    varContentType = "application/json; charset=utf-8";  
    varDataType = "xml";  
    varProcessData = true; 
    CallService(); 
} 

然后该函数调用此函数:

//Generic function to call AXMX/WCF  Service         
function CallService()  
{ 
        $.ajax({ 
            type        : varType, //GET or POST or PUT or DELETE verb 
            url         : varUrl, // Location of the service 
                    cache       : false, 
            data        : varData, //Data sent to server 
            contentType : varContentType, // content type sent to server 
            dataType    : varDataType, //Expected data format from server 
            processdata : varProcessData, //True or False 
            success     : function(msg) {//On Successfull service call 
            ServiceSucceeded(msg);                     
            }, 
            error: ServiceFailed// When Service call fails 
        }); 
} 

当我尝试运行该示例时,我在Google Chrome的开发者工具控制台窗口中获得以下内容:

无法加载资源:服务器响应状态为400(错误请求) XMLHttpRequest无法加载http://123.123.123.123/NameOfService.svc/GetStuffById。 Access-Control-Allow-Origin不允许使用null。

该服务运行正常,我目前正在通过webforms和控制台应用程序调用它。 GetStuffById是我想要调用的方法。它接受一个字符串(在本例中为GUID)作为参数并返回一个字符串。

该服务是WCF服务,并配置为返回SOAP消息。我更喜欢JSON,但这是另一个问题的另一个问题。

有什么想法在这里发生了什么?谢谢!

更新#1 - 我将POST更改为GET。还是不行。

2 个答案:

答案 0 :(得分:1)

查看您的代码:

  1. BlahBlahBlahWCFXML无法访问CallService()内的所有变量。
  2. varData的值有额外'(单引号)。如果GUID是常量值,您可以取消字符串连接并简单地写:
    varData = '{"stuffId": "12345678-abcd-9012-3456-abcdefghjkl"}';
    但是,如果GUID是一个变量,则在其他地方生成GUID,只需将变量放在此处:
    varData = '{"stuffId": "' + varGUID + '"}';

答案 1 :(得分:1)

看起来你正在尝试从jQuery调用WCF SOAP Web服务。这不是开箱即用的。 WCF SOAP服务需要SOAP消息来调用它 - 简单地转到URL是行不通的。如果你坚持使用WCF,那么宁静的WCF会有一些扩展,这将使这更容易。