[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();
}
}
Le code ci-dessus fonctionne correctement. Je reçois un 405 (méthode non autorisée) sur demande HEAD. La version de l'assembly que j'utilise est System.ServiceModel.Web, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35.
En fait, autant que je sache, il n'y a pas de moyen simple de l'autoriser. Cependant, vous pouvez essayer quelque chose comme la solution ci-dessous..Mais cela doit être fait pour chaque méthode qui nécessite GET et HEAD. pas si solution élégante ..
[ServiceContract]
public interface IService
{
[OperationContract]
[WebInvoke(Method = "*", UriTemplate = "/data")]
string GetData();
}
service public class: IService { #region IService Membres
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
}
Pouvez-vous poster le contrat d'exploitation pour le verbe HEAD s'il vous plaît? –
[OperationContract] [WebGet (UriTemplate = "MyUri")] Stream MyContract(); –
Est-ce encore un problème plus de 3 ans plus tard? J'ai besoin d'une solution à cela. –