2010-08-04 38 views
5

Tôi tự hỏi làm thế nào tôi có thể chỉ định một tham số của phương thức OperationContract trong WCF theo yêu cầu để xsd được tạo ra chứa minOccurs = "1" thay vì minOccurs = "0".Làm thế nào để xác định tham số của một OperationContract theo yêu cầu

Ví dụ:

[ServiceContract(Namespace = "http://myUrl.com")] 
public interface IMyWebService 
{ 
    [OperationContract] 
    string DoSomething(string param1, string param2, string param3); 
} 

tạo xsd này:

<xs:element name="DoSomething"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element minOccurs="0" name="param1" nillable="true" type="xs:string" /> 
     <xs:element minOccurs="0" name="param2" nillable="true" type="xs:string" /> 
     <xs:element minOccurs="0" name="param3" nillable="true" type="xs:string" /> 
    </xs:sequence> 
    </xs:complexType> 

Nhưng tôi muốn xác định minOccurs = "1" trong mã mà không cần phải tự sửa chữa nó trong tệp xsd.

+0

http: // stackoverflow .com/questions/1438623/how-can-i-force-wcf-to-autogenerate-wsdls-với-yêu cầu-phương pháp-tham số-minoc/3436039 # 3436039 – Freelancer

+0

Xem [tại đây] (http://stackoverflow.com/ câu hỏi/1438623/how-can-i-force-wcf-to-autogenerate-wsdls-với-yêu cầu-phương pháp-tham số-minocc/3436039 # 3436039) Tôi mỏng k rằng đó là giải pháp tốt hơn. –

Trả lời

7

Bạn có thể cần phải quấn thông số của bạn trong một lớp học, sau đó bạn có thể sử dụng thuộc tính DataMember và chỉ định IsRequired=true:

[ServiceContract(Namespace = "http://myUrl.com")] 
public interface IMyWebService 
{ 
    [OperationContract] 
    string DoSomething(RequestMessage request); 
} 

[DataContract] 
public class RequestMessage 
{ 
    [DataMember(IsRequired = true)] 
    public string param1 { get; set; } 

    [DataMember(IsRequired = true)] 
    public string param3 { get; set; } 

    [DataMember(IsRequired = true)] 
    public string param3 { get; set; } 
} 
+0

Đây không phải là câu trả lời tôi hy vọng sẽ đọc, nhưng cảm ơn bạn để làm rõ cách nó phải được thực hiện. –

+5

Điều này sẽ không làm cho đối số 'yêu cầu' trong OperationContract được đánh dấu là minOccurs = "0" trong xsd được tạo không? – arathorn

+0

@arathorn Tôi thấy bạn chưa bao giờ nhận được phản hồi ở đây. Bạn đưa ra một điểm mạnh. Tôi nghĩ rằng bạn là chính xác. Việc thi hành một yêu cầu tham số OperationContract trong WCF (theo như tôi đã đọc) không thể được thực hiện trên các kiểu 'Nullable' mà không cần nhập vào hợp đồng thông báo. Đây là liên kết tôi đã tìm thấy: http://social.msdn.microsoft.com/Forums/vstudio/en-US/e707ed20-c09c-4e26-927a-7c3071d74ed7/operationcontract-with-required-parameters?forum=wcf .. Tôi nghĩ bạn đúng về quan điểm của bạn. –

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