Как заставить поведение WCF WebTTP принять глаголы головы?
-
21-09-2019 - |
Вопрос
У меня есть служба WCF, размещенная в службе Windows. Я добавил к этому веб -сайт с поведением WebHTTP, и всякий раз, когда я отправляю ему запрос на получение запроса, я получаю HTTP 200, что я хочу, проблема в том, что я получаю HTTP 405 всякий раз, когда отправляю ему запрос на голову.
Есть ли способ вернуть его HTTP 200 и для головы? Это вообще возможно?
Изменить: это контракт на операцию:
[OperationContract]
[WebGet(UriTemplate = "MyUri")]
Stream MyContract();
Решение
[ServiceContract]
public interface IService
{
[OperationContract]
[WebGet(UriTemplate="/data")]
string GetData();
}
public class Service : IService
{
#region IService Members
public string GetData()
{
return "Hello";
}
#endregion
}
public class Program
{
static void Main(string[] args)
{
WebHttpBinding binding = new WebHttpBinding();
WebServiceHost host = new WebServiceHost(typeof(Service), new Uri("http://localhost:9876/MyService"));
host.AddServiceEndpoint(typeof(IService), binding, "http://localhost:9876/MyService");
host.Open();
Console.Read();
}
}
Приведенный выше код работает нормально. Я получаю 405 (метод не разрешен) по запросу головы. Версия сборки, которую я использую, IS System.ServiceModel.Web, версия = 3.5.0.0, культура = нейтральная, publicKeyToken = 31BF3856AD364E35.
На самом деле, насколько я знаю, нет прямого способа этого. ..
[ServiceContract]
public interface IService
{
[OperationContract]
[WebInvoke(Method = "*", UriTemplate = "/data")]
string GetData();
}
Общественный класс Сервис: Iservice {#region Iservice члены
public string GetData()
{
HttpRequestMessageProperty request =
System.ServiceModel.OperationContext.Current.IncomingMessageProperties["httpRequest"] as HttpRequestMessageProperty;
if (request != null)
{
if (request.Method != "GET" || request.Method != "HEAD")
{
//Return a 405 here.
}
}
return "Hello";
}
#endregion
}
Другие советы
Похоже на серьезную ошибку в службе (или даже в рамках). Поддержка головы в HTTP/1.1 никоим образом не является необязательной.