У меня есть сервис с почти точной подписью. Я могу передать значения, которые имеют "." во имя. Например, это будет работать на моем:
[OperationContract]
[WebGet(UriTemplate = "category/{id}")]
string category(string id);
с URL-адресом http://localhost/MyService.svc/category/test.category
Я получаю значение `" test.category ", переданное как строковое значение.
Так что должна быть какая-то другая проблема. как вы получаете доступ к URL? просто прямо в браузере? Или через вызов JavaScript? Просто интересно, если это какая-то ошибка на стороне клиента. Сервер передает значение просто отлично. Я бы порекомендовал попытаться получить доступ к URL-адресу в вашем браузере, и, если он не работает, напишите точно, какой URL-адрес вы используете и какое сообщение об ошибке.
Кроме того, вы используете WCF 3.5 SP1 или просто WCF 3.5? В книге RESTFul .Net, которую я читаю, я вижу некоторые изменения в отношении UriTemplate.
И, наконец, я изменил простую Службу из книги RESTFul .Net, которая работает, и я получил правильный ответ.
class Program
{
static void Main(string[] args)
{
var binding = new WebHttpBinding();
var sh = new WebServiceHost(typeof(TestService));
sh.AddServiceEndpoint(typeof(TestService),
binding,
"http://localhost:8889/TestHttp");
sh.Open();
Console.WriteLine("Simple HTTP Service Listening");
Console.WriteLine("Press enter to stop service");
Console.ReadLine();
}
}
[ServiceContract]
public class TestService
{
[OperationContract]
[WebGet(UriTemplate = "category/{id}")]
public string category(string id)
{
return "got '" + id + "'";
}
}