2011-01-07 21 views
7

Tôi đã tạo một dịch vụ WCF đơn giản bên trong dự án WebApplication.WCF: hoạt động với tham số ngoài không được hỗ trợ

[ServiceContract(Namespace = "http://my.domain.com/service")] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class MyService 
{ 
    [OperationContract] 
    public string PublishProfile(out string enrollmentId, string registrationCode) 
    { 
     enrollmentId = null; 
     return "Not supported"; 
    } 

xây dựng - tất cả mọi thứ được biên dịch thành công

Sau đó tôi đã cố gắng để mở dịch vụ trong trình duyệt, tôi đã có những lỗi sau:

Operation 'PublishProfile' in contract 'MyService' specifies an 'out' or 'ref' parameter. Operations with 'out' or 'ref' parameters are not supported

Tôi không thể sử dụng ' ra 'tham số?

Có gì sai ở đây?

Cảm ơn

P.S. Tôi sử dụng VS2008 SP1, .NET 3.5

Trả lời

4

Vấn đề trong trường hợp của tôi là cấu hình dịch vụ mặc định được tạo trong ứng dụng ASP.NET của tôi với trình hướng dẫn Visual Studio là một loại dịch vụ. Ràng buộc điểm cuối là "webHttpBinding". Theo như tôi hiểu bây giờ nó là ràng buộc cho các dịch vụ REST, và họ chỉ không có khả năng thể chất để làm việc với các tham số ngoài. Đối với họ tham số không được hỗ trợ. Và những gì tôi thực sự cần là một 'basicHttpBinding" cho phép làm việc với các thông số ra.

Rất cám ơn đến tất cả mọi người đã giúp tôi tìm ra rằng.

+0

Yee ,,, Tôi không đề cập đến việc tôi đang sử dụng dịch vụ REST. Nhưng thực ra, tôi không biết điều đó. – Budda

0

Tôi nghĩ thông số Out sẽ đến sau.

nó phải như thế này:

public string PublishProfile(string registrationCode, out string enrollmentId) 

Ngoài ra, bạn đang thiết lập các chuỗi để null - tại sao không sử dụng string.Empty?

+0

Đó chỉ là một cuống ... Nhưng có lẽ tôi cần phải biết thêm lý do tại sao string.Empty là tốt hơn – Budda

+0

thay đổi vị trí cho tham số 'outed' không giúp đỡ. – Budda

+0

http://codeasp.net/forums/asp-net-topics/getting-started-general-asp-net/117/ what-is-different-between-null-vs-string-empty-vsin-c có câu trả lời hay về 'string.empty'. Về câu hỏi ban đầu của bạn, tôi thực sự bối rối vì sao bạn gặp lỗi ... – VoodooChild

2

Câu trả lời tôi đã tìm thấy là:.

"Ý tưởng về một tham số ra là phương pháp sẽ nhanh chóng tham chiếu null mà bạn vượt qua trong một dịch vụ web là quốc tịch, do vậy tay cầm mà bạn có trên một đối tượng đi vào một webservice như một tham số sẽ không giống như một đối tượng làm cho nó trở thành phía máy chủ webservice. Bản chất của việc này ngăn cản các tham số. "

Source

+0

Theo kinh nghiệm của tôi, tôi đã sử dụng các tham số 'out' (trong một dự án khác). Ý tưởng từ một liên kết khác (xem câu trả lời của Schellack) gợi ý: các tham số ngoài có ý nghĩa trong WCF, tôi khuyên bạn nên sử dụng các tham số. – Budda

1

Hãy thử điều này:

... 
[OperationContract] 
[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)] 
public string PublishProfile(out string enrollmentId, string registrationCode) 
... 

Tôi tin rằng phong cách cơ thể mặc định (trần) chỉ hỗ trợ một giá trị trả về duy nhất.

Các vấn đề liên quan