2011-03-10 96 views
3

我在Visual Studio 2008 SP1中有兩個Web項目,一個託管WCF服務,另一個用於使用WCF服務。有問題的服務公開webHttpBinding端點並將JSON作爲輸入並返回JSON。Visual Studio集成web服務器中的WCF「方法不允許」

我已經使用jQuery的AJAX爲使用來自客戶端的Web應用程序,像這樣的服務:

$(document).ready(function() { 
    var data = '{"myobject":{"Business":"PIZZA"}}'; 
    $.ajax({ 
     type: "POST", 
     contentType: "application/json", 
     data: data, 
     dataType: 'json', 
     url: "http://localhost:1212/JobInfo.svc/ReturnThisString", 
     error: 
      function(XMLHttpRequest, textStatus, errorThrown) { 
       alert("Error"); 
      }, 
     success: function(data) { 
      alert("BoolValue: " + data.GetDataUsingDataContractResult.BoolValue); 
      alert("StringValue: " + data.GetDataUsingDataContractResult.StringValue); 
     } 
    }); 

}); 

而且我得到了Firebug的HTML請求以下錯誤:

http://localhost:1212/JobInfo.svc/ReturnThisString 405 Method Not Allowed 

但如果運行在承載項目的Web項目中完全相同的文件工作正常。

託管項目在設置端口localhost:1212上運行,客戶端在localhost上運行:RANDOM_PORT。由於本地主機是相同的,我會想象它不是跨域問題?還是端口部分也算?

服務器合同如下:

[OperationContract] 
[WebInvoke(Method="POST",UriTemplate="ReturnThisString", 
     BodyStyle=WebMessageBodyStyle.Wrapped, 
     RequestFormat=WebMessageFormat.Json, 
     ResponseFormat=WebMessageFormat.Json)] 
EventListArgs ReturnThisString(EventListArgs myobject); 

[Serializable] 
[DataContract] 
public class EventListArgs { 

    [DataMember(IsRequired = false)] 
    public string Business; 

    [DataMember(IsRequired = false)] 
    public string Feeder; 

} 

而實現的代碼是:

public EventListArgs ReturnThisString(EventListArgs myobject) 
{ 
    return myobject; 
} 

此加入作爲一個簡單的方法來證明我沒有剛剛做一些愚蠢的。我喜歡稱之爲健康檢查。它是一個簡單的函數,它接受一個複雜的(其他類型的字符串)JSON對象作爲參數並返回一個複雜的JSON對象。

enter image description here

正如你可以在上面看到我有使用Visual Studio內置的Web服務器的兩個網絡項目(本地IIS安裝是不可能的)。上面的配置不起作用,但是如果你能看到我也在服務器主機中獲得了Darkside測試頁面,這是來自客戶端的精確副本,並且這完全沒有問題。

+0

好吧,但我不知道爲什麼它的工作原理,然後如果我從內置的卡西尼在同一個網絡中運行它:-(所以當我運行它在託管SVC文件的同一網絡上時,它工作正常 – Boden 2011-03-10 07:00:05

+0

請問您服務實際上期望一個http POST或GET嗎?你是否使用html

標記從瀏覽器嘗試了該URL,並且使用這種方式執行POST,而不是使用JavaScript?不允許的方法由您的WCF服務應用程序發出。一個跨域的問題 – 2011-03-10 07:24:44

+0

你從哪裏運行服務?Casini服務器,IIS或其他什麼?還有,當你使用像fiddler這樣的工具發送請求時會發生什麼呢?還要確保你實際處理POST方法, mimetype是正確的 – Polity 2011-03-10 16:22:07

回答

2

嘗試使用IIS Express 它具有與完整的IIS相同的功能,無需安裝。 只需要一條簡單的命令行即可啓動它。它應該擺脫你得到的卡西尼相關的錯誤。

+0

感謝您的領導,將下載並嘗試。 – Boden 2011-03-21 00:17:28

+0

恐怕IIS express只支持.net 4.0。由於我的公司沒有將其國有企業升格爲擁有.net 4.0,因此我無法使用該選項。我目前正在通過應對網站服務器解決這個問題。 – Boden 2011-03-21 01:30:49

+0

iisexpress /?我的朋友。 如果你啓動它作爲iisexpress /clr:3.5你將在3.5框架下運行。 我似乎無法使用這個迷你markdown語法... – sjeffrey 2011-03-23 18:29:22

相關問題