Как заставить поведение WCF WebTTP принять глаголы головы?

StackOverflow https://stackoverflow.com/questions/1387932

Вопрос

У меня есть служба 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 никоим образом не является необязательной.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top