我看到很多关于这个问题的实例,但是我没有看到任何似乎适合我的用例的答案,所以我想我会用自己的细节再次询问。< / p>
我有一个简单的RESTful WCF服务,我可以毫无问题地POST,但是当我尝试执行GET请求时会返回405错误。
我的情况和我看到的解决方案之间的主要区别如下
以下是我创建和启动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();
}
返回对象都有数据合约。
我是否缺少一些配置?它可能是主机上的一些安全设置吗?
答案 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