Ajax POST:“服务器在处理请求时遇到错误”

Posted

技术标签:

【中文标题】Ajax POST:“服务器在处理请求时遇到错误”【英文标题】:Ajax POST: "Server encountered an error processing the request" 【发布时间】:2016-01-02 09:36:46 【问题描述】:

我有一个与 WCF REST 服务通信的 jQuery Mobile 应用程序。我对 REST 服务的大部分调用都是 GET。但是,一个函数使用带有 JSON 数据的 POST。

POST 在我们的开发服务器上运行完美,所以我很确定这不是我的代码。当我将它投入生产时,它不再起作用了。我在 REST 服务中包含了一些日志记录,因此我很清楚在移动应用程序通信时调用了什么方法。所有的 GET 都很好,记录了使用的方法。但是 POST 方法甚至没有被调用。

当我发送 POST 请求时,我收到“服务器在处理请求时遇到错误。有关详细信息,请参阅服务器日志。”我已经查看了服务器上的事件查看器,但找不到任何与此相关的消息。我们还查看了防火墙日志,我没有看到任何被阻止的内容。

我不知道是什么导致了错误。

这是我的 Ajax 调用:

    var JSONObject = 
        "customerID": customerID
        , "keyserialNumber": serialNumber
        , "issuedToName": newKeyHolderName
        , "userID": loggedInUserID
        , "keyIssuedUserID": newKeyHolderUserID
        , "signature": signature
        , "userEmail": loggedInUserEmail
        , "ccEmails": ccEmails
    ;

    $.ajax(
        url: baseUrl + 'UpdateKeyReceipt',
        type: 'POST',
        data: JSON.stringify(JSONObject),
        error: function(e)
            console.log(e);
        ,
        dataType: 'JSON',
        contentType: 'application/json; charset=utf-8',
        success: function (data) 
            ClearLookupData();
            $('#popKeyReceipt').popup('close');
            $.mobile.loading('hide');
        
    );
    $.mobile.loading('hide');

REST 服务如下所示:

界面:

    [OperationContract]
    [WebInvoke(Method = "POST",
       ResponseFormat = WebMessageFormat.Json,
       RequestFormat = WebMessageFormat.Json,
       BodyStyle = WebMessageBodyStyle.WrappedRequest,
       UriTemplate = "UpdateKeyReceipt")]
    string KeyReceiptData(Stream data);

方法调用:

    public string KeyReceiptData(Stream data)
    
        string logFile = @"\\ikraid\Clients\InstaKey\Logs\IKRestLog.txt";
        using (StreamWriter sw = File.AppendText(logFile))
        
            sw.WriteLine("KeyReceiptData: ");
        

        StreamReader reader = new StreamReader(data);

        string result = reader.ReadToEnd();
        reader.Close();
        reader.Dispose();

        UpdateKeyReceipt keyData = JsonConvert.DeserializeObject<UpdateKeyReceipt>(result);

        Helper.UpdateKeyReceipt(keyData.CustomerID.ToString(), keyData.KeySerialNumber.ToString(), keyData.IssuedToName.ToString(),
            keyData.UserID.ToString(), keyData.KeyIssuedUserID.ToString(), keyData.Signature.ToString(),
            keyData.UserEmail.ToString(), keyData.CCEmails.ToString());

        return "Received: " + result;
    

日志文件永远不会被写入,所以我知道它甚至没有到达方法。

任何人都有我可以做的事情,或者看看这可能会有所帮助,我将非常感激。

谢谢

【问题讨论】:

【参考方案1】:

终于想通了。问题出在这行:

contentType: '应用程序/json; charset=utf-8',

我将它从 ajax 调用中取出,然后能够在日志文件中看到进度。然后发现在 rest 服务中创建 pdf 存在问题。修复 REST 服务后,该应用程序就会像魅力一样工作。

我最初将其放入,因为我看到许多解决方案都说必须包含该行。没想到拿出来测试一下。

【讨论】:

以上是关于Ajax POST:“服务器在处理请求时遇到错误”的主要内容,如果未能解决你的问题,请参考以下文章

将 json 参数传递给 WCF 函数给出错误“服务器在处理请求时遇到错误。有关更多详细信息,请参阅服务器日志”

Fileless Restful WCF 在本地 IIS7 中托管时无法正常工作,但可以在本地运行

接收 eBay SOAP 通知消息

WCF REST Web 服务 - Json 的反序列化

$.post 与 $.ajax

ajax的post提交方式和传统的post提交方式哪个更快?