2012-02-27 120 views
0

我搞砸了我的第一個WCF服務,並且遇到了傳遞參數的問題。將參數傳遞給WCF服務時發生內部服務器錯誤

我的jQuery的AJAX調用看起來像這樣...

$.ajax({ 
    type : 'POST', 
    async : true, 
    url  : 'Service2.svc/GetStats', 
    contentType: 'application/json; charset=utf-8', 
    data : '{ i : 12 }', 
    dataType: 'json', 
    success : function(result) { 
     //success routine... 
    } 
}); 

加我的服務代碼是這樣......

<OperationContract()> _ 
<WebInvoke(ResponseFormat:=WebMessageFormat.Json, RequestFormat:=WebMessageFormat.Json)> _ 
Public Function GetStats(ByVal i As Integer) As Results 
    Dim returnValue As New Results 
    returnValue.iValue1 = 10 
    returnValue.iValue2 = 20 
    returnValue.sMessage = "You executed " + "sdfsd" 
    Return returnValue 
End Function 

Results類是一個非常簡單的holder類,兩個整數和一個串。

如果我從GetStats中刪除參數並從我的$ .ajax對象中刪除相應的data屬性,我可以訪問客戶端上的三個返回值,此服務工作正常。

當包含參數i時,我得到Internal Server Error狀態:500。

我猜我缺少一個屬性或從我的服務功能?

回答

1

感謝您的答覆。

我花了,而這一個摔跤和所有我需要做的是...

 data : '{"i" : 12}' , //Object name i in double-quotes 

因此違背了其他一些建議,我想通過JSON作爲一個字符串。 (我想一個人應該真的使用這樣的庫,如Crockford's JSON

但是我只能在找到實際的錯誤後才發現這個。我這樣做是通過拋出這個片段到我web.config文件...

<system.diagnostics> 
    <sources> 
    <source name="System.ServiceModel" switchValue="Warning, ActivityTracing" 
     propagateActivity="true"> 
     <listeners> 
     <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
      <filter type="" /> 
     </add> 
     <add name="ServiceModelTraceListener"> 
      <filter type="" /> 
     </add> 
     </listeners> 
    </source> 
    </sources> 
    <sharedListeners> 
    <add initializeData="app_tracelog.svclog" 
     type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, 
     Culture=neutral, PublicKeyToken=b77a5c561934e089" 
     name="ServiceModelTraceListener" traceOutputOptions="Timestamp"> 
     <filter type="" /> 
    </add> 
    </sharedListeners> 
</system.diagnostics> 

我從mkdot.net得到這個,它應該真正利用SvcConfigEditor.exe生成 - 這我不能我鎖定的機器上找到。但只是粘貼在似乎工作 - 並給我在我的開發文件夾中的日誌文件 - 這實際上告訴我錯誤的性質。

1

您試圖以字符串形式發送數據。你必須把它作爲一個對象發送。

data : { i : 12 }, 

嗯。它不適用於此。

試試這個。

data: 'i=12'; 

更改您的服務,然後重試。

<OperationContract()> _ 
<WebInvoke(ResponseFormat:=WebMessageFormat.Json, RequestFormat:=WebMessageFormat.Json)> _ 
Public Function GetStats(ByVal i As String) As Results 
    Dim returnValue As New Results 
    returnValue.iValue1 = 10 
    returnValue.iValue2 = 20 
    returnValue.sMessage = "You executed " + "sdfsd" 
    Return returnValue 
End Function 
+0

同樣的錯誤恐怕 – 2012-02-27 15:54:41

+0

@ElRonnoco我不熟悉vb,但是你的ajax調用沒有任何問題。你有沒有嘗試過使用paremter靜態地調用你的服務?應該有一個語法錯誤或st。 – littlealien 2012-02-27 15:59:01

+0

@ElRonnoco我想,呃,你通過js發送數據。所以整數更改爲字符串。你正試圖把參數作爲整數。也許你必須得到參數作爲字符串,然後將其轉換爲整數的方法.. – littlealien 2012-02-27 16:01:16

0

你應該做的

var data = { i : 12 }; 

$.ajax({ 
    type : 'POST', 
    async : true, 
    url  : 'Service2.svc/GetStats', 
    contentType: 'application/json; charset=utf-8', 
    data : data, 
    dataType: 'json', 
    success : function(result) { 
     //success routine... 
    } 
}); 

要發送的數據作爲一個字符串,而它應該是一個對象

+0

謝謝,我已經試過這個了。 – 2012-02-27 15:54:29

相關問題