Trong khi sử dụng WCF và OperationContracts Tôi đã phương pháp sau được xác định:Làm cách nào để buộc WCF tự động tạo WSDL với các tham số phương thức bắt buộc (minoccurs = "1")?
[OperationContract]
[FaultContract(typeof(ValidationFault))]
[FaultContract(typeof(FaultException<ExceptionDetail>))]
int DoSomething(int someId, MyComplexType messageData);
Khi điều này được dịch sang một WSDL bởi thời gian chạy WCF, nó kết thúc với với minOccurs = "0" được liệt kê cho các thông số someId và messageData (và sau đó ném một lỗi thời gian chạy nếu các tham số này bị thiếu).
Nếu tôi tạo ra một proxy sử dụng soapUI tôi nhận được cái gì đó trông như thế này:
<com:DoSomething>
<!--Optional-->
<com:EventId>1</com:EventId>
<!--Optional-->
<com:myComplexType >
<com:id>1</com:id>
</com:myComplexType >
</com:DoSomething>
Trường id trong MyComplexType được đánh dấu với DataMemeber thuộc tính sử dụng isRequired = "true "và do đó được tiếp xúc là bắt buộc. Rõ ràng là khá gây nhầm lẫn cho WSDL để xác định rằng một tham số là tùy chọn khi nó không phải là, nhưng tôi không thể thấy bất kỳ cách rõ ràng nào để đánh dấu OperationContract để buộc WCF nhận ra và phơi bày các tham số này theo yêu cầu.
Tôi hơi bối rối vì dường như không có cách nào rõ ràng để thực hiện việc này (đọc intellisense/msdn/google). Hoặc tôi sẽ mù và nhìn thấy một cái gì đó hiển nhiên.
Bất kỳ manh mối nào?
tôi đã tìm thấy vấn đề này Microsoft Connect https://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx ? FeedbackID = 482144 ngụ ý điều này có thể không thực hiện được. Điều hút. – DavidWhitney
Với suy nghĩ thêm, nó xuất hiện như thể các tham số được liệt kê là minoccurs = "0" vì các kiểu tự có thể là null, do đó, nếu ai đó cung cấp một giá trị null, nó vẫn khớp với phương thức sig. Vẫn không giúp ích cho các mục đích tạo WSDL và xác định hợp đồng với ứng dụng/tổ chức gọi điện. – DavidWhitney
WSDL được tạo không bị ảnh hưởng bởi vì loại có thể là null (các loại tham chiếu so với các loại giá trị). Nếu loại giá trị bị bỏ qua, giá trị mặc định cho loại giá trị đó sẽ được sử dụng. Xem câu trả lời của tôi dưới đây tuy nhiên. – Thorarin