WCF服务为GET请求而非POST请求返回错误405

本文关键字:请求 POST 返回 错误 服务 GET WCF | 更新日期: 2023-09-27 18:21:09

我看到了很多关于这个问题的例子,但我没有看到任何似乎符合我的用例的答案,所以我想我会用自己的详细信息再次询问它。

我有一个简单的RESTful WCF服务,我可以毫无问题地对其POST,但当我尝试执行GET请求时,它会返回405错误。

我的情况和我看到的解决方案之间的主要区别如下

  • 我没有使用ASP.NET,这是一个独立的C#应用程序,没有web.config
  • 我不是从IIS运行这个,它只是一个exe

以下是我如何创建和启动WCF服务:

mHTTPserver = new WebServiceHost(new FileProcessService(), new Uri(string.Format("http://{0}:{1}/", httpIp, httpPort)));
ServiceDebugBehavior sdb = mHTTPserver.Description.Behaviors.Find<ServiceDebugBehavior>();
sdb.HttpHelpPageEnabled = false;
ServiceEndpoint ep = mHTTPserver.AddServiceEndpoint(typeof(IFileProcessService), new WebHttpBinding(), "");
mHTTPserver.Open();

这是我使用的服务接口:

[ServiceContract]
public interface IFileProcessService 
{
    [OperationContract]
    [WebInvoke(UriTemplate = "ProcessFile?s={session}&file={fileName}", BodyStyle = WebMessageBodyStyle.Bare)]
    Stream ProcessFile(int session, string fileName);
    [OperationContract]
    [WebGet(UriTemplate = "status", ResponseFormat=WebMessageFormat.Json)]
    ServerStatus GetStatus();
    [OperationContract]
    [WebGet(UriTemplate = "clients", ResponseFormat = WebMessageFormat.Json)]
    List<MapAtDeskClient> GetClients();
    [OperationContract]
    [WebGet(UriTemplate = "work", ResponseFormat = WebMessageFormat.Json)]
    List<WorkItem> GetWorkItems();
}

返回对象都有数据协定。

有没有我缺少的配置?这可能是主机上的一些安全设置吗?

WCF服务为GET请求而非POST请求返回错误405

如果您还没有,您可能想尝试如下托管服务:

mHTTPserver = new WebServiceHost(new FileProcessService(), new Uri(string.Format("http://{0}:{1}/", httpIp, httpPort)));
mHTTPserver.Open();

本质上与您拥有的主机实例化相同,只是您让WebServiceHost自动生成端点,而不是手动配置。

根据MSDN的说法,"如果WebServiceHost在服务描述中找不到端点,它会自动在服务的基地址为HTTP和HTTPS基地址创建一个默认端点。如果用户在基地址明确配置了端点,它不会自动创建端点。"

http://msdn.microsoft.com/en-us/library/system.servicemodel.web.webservicehost(v=vs.110).aspx