【问题标题】:404 when calling my wcf service in javascript - what am I missing?在javascript中调用我的wcf服务时出现404 - 我错过了什么?
【发布时间】:2013-09-04 14:10:28
【问题描述】:

我正在尝试调用我的 WCF 服务并且我正在使用 jQuery 的 AJAX。除非我弄错了,否则问题似乎出在我尝试以 JSON 格式取回该数据时。我不确定网址是否正确。

这是我的 service.svc.cs。我想调用 AddNewQuery

//------------------------------------------------------------------------------
// <copyright file="WebDataService.svc.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Data.Services;
using System.Data.Services.Common;
using System.Linq;
using System.ServiceModel.Web;
using System.Web;
using System.Net;
using System.Data.Objects;
using System.Data.Entity;
using System.Net.Http;
using System.Web.Http;
using System.Web;
using System.ServiceModel.Web;

namespace BRADAPI
{
    [JSONPSupportBehavior]
    [System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)]
    public class Service1 : System.Data.Services.DataService<BradOnlineEntities>
    {
        // This method is called only once to initialize service-wide policies.
        public static void InitializeService(DataServiceConfiguration config)
        {
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
            config.SetEntitySetAccessRule("*", EntitySetRights.All);
            config.UseVerboseErrors = true;
            config.SetServiceOperationAccessRule("AddNewQuery", ServiceOperationRights.All);
            config.SetServiceOperationAccessRule("GetQueryByID", ServiceOperationRights.All);
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
        }

        protected override void OnStartProcessingRequest(ProcessRequestArgs args)
        {
            base.OnStartProcessingRequest(args);
            //Cache for a minute based on querystring            
            HttpContext context = HttpContext.Current;
            HttpCachePolicy c = HttpContext.Current.Response.Cache;
            c.SetCacheability(HttpCacheability.ServerAndPrivate);
            c.SetExpires(HttpContext.Current.Timestamp.AddSeconds(60));
            c.VaryByHeaders["Accept"] = true;
            c.VaryByHeaders["Accept-Charset"] = true;
            c.VaryByHeaders["Accept-Encoding"] = true;
            c.VaryByParams["*"] = true;
        }

        [WebGet]
        public IQueryable<tblContactQuery> GetQueryByID(Guid QueryID)
        {
            IQueryable<tblContactQuery> biglist = (from c in this.CurrentDataSource.tblContactQueries where c.QueryID.Equals(QueryID) select c);
            return biglist;
        }

        [WebGet]
        public IQueryable<tblContactQuery> AddNewQuery(string QueryText, string UserID)
        {
            // Make NULL to remove compile errors   
            Guid GUserID = Guid.Parse(UserID);
            Guid QueryID = Guid.NewGuid();

            tblContactQuery C = new tblContactQuery
            {
                QueryID = QueryID,
                UserID = GUserID,
                QueryText = QueryText,
            };
            try
            {
                this.CurrentDataSource.tblContactQueries.Add(C);
                this.CurrentDataSource.SaveChanges();
                return GetQueryByID(QueryID);

            }
            catch
            {
                return GetQueryByID(QueryID);
            }
        }

    }
}

我的 JS 代码

function sendQuery() {

        userId = $("#hdnUserId").val();
        contactId = $("#hdnContactId").val();
        txtQuery = $('#txtQuery').val();

        var successFlag;

        $.ajax({
            url: url,
            data: "UserID='" + userId + "'&" + "QueryText='" + txtQuery + "'&" + "ContactID='" + contactId + "'",
            type: "GET",
            async: false,
            datatype: "json",
            success: function (data) {
                successFlag = 1;
            },
            error: function (data) {
                successFlag == 0;
            }
        });

        if (successFlag == 1) {
            alert("Thank you, your query has been sent to a member of the Alf team");
            $("#dialog").css("display", "false");
            $("#dialog").dialog("close");
        }

        else if (successFlag == 0) {
            alert("Query not sent to the ALF team");
            $("#dialog").css("display", "false");
            $("#dialog").dialog("close");
        }
    }

我的成功和错误块没有受到打击,因为它没有打击服务。所以这不是成功或失败。

关于更改我的 URL 的任何提示?

【问题讨论】:

    标签: javascript jquery wcf query-string


    【解决方案1】:

    URL 值参数不以' ' 分隔。使用encodeURIComponent(...) 正确转义参数。

    代替

    data: "UserID='" + userId + "'&" + "QueryText='" + txtQuery + "'&" + "ContactID='" + contactId + "'"
    

    试试

    data: "UserID=" + userId + "&QueryText=" + encodeURIComponent(txtQuery) + "&ContactID=" + encodeURIComponent(contactId),
    

    此外,根据您的一张屏幕截图,您的网址似乎有误。在http://i.stack.imgur.com/KtFlv.png 中,网址是http://stating1......com/alfapi/Service.svc/AddNewQuery?format=json?QueryText

    这表明您的url 变量已经包含一个查询,即http://stating1......com/alfapi/Service.svc/AddNewQuery?format=json?format=json 部分是您的 url 参数中的一个查询,在使用来自$.ajax(...)data 时应避免使用它。

    改为

    var url = 'http://stating1......com/alfapi/Service.svc/AddNewQuery';
    
    ....
    
        $.ajax({
            url: url,
            // move format=json from your url variable to data: part
            data: "format=json&UserID=" + encodeURIComponent(userId) + "&QueryText=" + encodeURIComponent(txtQuery) + "&ContactID=" + encodeURIComponent(contactId),
            type: "GET",
            async: false,
            datatype: "json",
            success: function (data) {
                successFlag = 1;
            },
            error: function (data) {
                successFlag == 0;
            }
        });
    

    "JavaScript encodeURIComponent() Function"

    【讨论】:

    • 我会试试你的建议。
    • 谢谢。正如你所说,我的网址是错误的,我想我需要一些新的眼光。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多