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

时间:2014-09-09 15:34:40

标签: c# .net wcf

我看到很多关于这个问题的实例,但是我没有看到任何似乎适合我的用例的答案,所以我想我会用自己的细节再次询问。< / p>

我有一个简单的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();
}

返回对象都有数据合约。

我是否缺少一些配置?它可能是主机上的一些安全设置吗?

1 个答案:

答案 0 :(得分:0)

如果您还没有,可能需要尝试按以下方式托管服务:

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

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

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

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