Tôi có một dịch vụ với gần như chữ ký chính xác. Tôi có thể chuyển các giá trị có dấu "." trong tên. Ví dụ, điều này sẽ làm việc trên mỏ:
[OperationContract]
[WebGet(UriTemplate = "category/{id}")]
string category(string id);
với url http://localhost/MyService.svc/category/test.category
tôi nhận được giá trị ` "test.category" thông qua tại như giá trị chuỗi.
Vì vậy, phải có một số vấn đề khác. bạn truy cập vào URL như thế nào? chỉ trực tiếp trong trình duyệt? Hoặc qua cuộc gọi javascript? Chỉ cần tự hỏi nếu nó là một số lỗi ở phía khách hàng. Máy chủ chuyển giá trị tốt. Tôi khuyên bạn nên thử truy cập url trong trình duyệt của mình và nếu nó không hoạt động thì hãy đăng chính xác URL bạn đang sử dụng và thông báo lỗi là gì.
Ngoài ra, bạn có đang sử dụng WCF 3.5 SP1 hoặc chỉ WCF 3.5 không? Trong cuốn sách RESTFul .Net tôi đang đọc, tôi thấy có một số thay đổi liên quan đến UriTemplate.
Và cuối cùng, tôi đã sửa đổi một Dịch vụ đơn giản từ sách RESTFul .Net hoạt động và tôi nhận được phản hồi chính xác.
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 + "'";
}
}
+1 cho đề xuất chuỗi truy vấn. Các khoảng thời gian hoạt động tốt ở bất kỳ đâu trong yêu cầu, ngoại trừ ở cuối. –
UriTemplate (và URL) trông như thế nào khi bạn gắn các tham số vào chuỗi truy vấn? – dumbledad