我在 Visual Studio 2008 SP1 中有两个 Web 项目,一个承载 WCF 服务,另一个用于使用 WCF 服务。有问题的服务公开了一个 webHttpBinding 端点并将 JSON 作为输入并返回 JSON。
我已经使用 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 服务器的 Web 项目(无法在本地安装 IIS)。上面的配置不起作用,但如果你能看到我在服务器主机中也有 Darkside 测试页面,它是来自客户端的精确副本,并且这个工作没有任何问题。
最佳答案
尝试使用 IIS Express 它具有与成熟的 IIS 相同的功能,并且无需安装。 只需一个简单的命令行即可启动它。它应该可以消除您遇到的与 Casini 相关的错误。
关于c# - Visual Studio 集成网络服务器中的 WCF "Method Not Allowed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5256419/