2015-10-05 156 views
3

我有一個jQuery Mobile應用程序與WCF REST服務進行通信。我對REST服務的大部分調用都是GET。但是,一個函數使用POST和JSON數據。Ajax 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; 
    } 

日誌文件從來沒有是w因爲我知道它甚至沒有達到這個方法。

任何人都有我可以做的事情,或者看看可能會有所幫助,我非常感謝。

謝謝

回答

0

終於明白了這一點。問題是這樣的:

contentType:'application/json; charset = utf-8',

我把它從ajax調用中取出,然後能夠看到日誌文件的進度。然後發現在其他服務中創建PDF的問題。一旦REST服務被修復,該應用就像一個魅力。

我原本把它放在裏面,因爲我看到很多說這行必須包含的解決方案。沒有想過要拿出來測試。