我在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對象。
正如你可以在上面看到我有使用Visual Studio內置的Web服務器的兩個網絡項目(本地IIS安裝是不可能的)。上面的配置不起作用,但是如果你能看到我也在服務器主機中獲得了Darkside測試頁面,這是來自客戶端的精確副本,並且這完全沒有問題。
好吧,但我不知道爲什麼它的工作原理,然後如果我從內置的卡西尼在同一個網絡中運行它:-(所以當我運行它在託管SVC文件的同一網絡上時,它工作正常 – Boden 2011-03-10 07:00:05
請問您服務實際上期望一個http POST或GET嗎?你是否使用html
你從哪裏運行服務?Casini服務器,IIS或其他什麼?還有,當你使用像fiddler這樣的工具發送請求時會發生什麼呢?還要確保你實際處理POST方法, mimetype是正確的 – Polity 2011-03-10 16:22:07