2009-07-21 43 views
14

Tôi đang cố gắng có các phương thức quá tải trong dịch vụ web nhưng tôi nhận được System.InvalidOperationException khi cố gắng "Thêm tham chiếu web" trong Visual Studio 2005 (đây là đoạn mã có liên quan)):Cách truy cập dịch vụ web với các phương thức quá tải

public class FileService : System.Web.Services.WebService 
{ 
    private static readonly MetaData[] EmptyMetaData = new MetaData[0]; 
    public FileService() 
    { 
    // a few innocent lines of constructor code here... 
    } 
    [WebMethod(MessageName = "UploadFileBasic", 
     Description = "Upload a file with no metadata properties")] 
    public string UploadFile(string trimURL 
     , byte[] incomingArray 
     , string fileName 
     , string TrimRecordTypeName) 
    { 
     return UploadFile(trimURL 
       , incomingArray 
       , fileName 
       , TrimRecordTypeName 
       , EmptyMetaData); 
    } 
    [WebMethod(MessageName = "UploadFile", 
     Description = "Upload a file with an array of metadata properties (Name/Value pairs)")] 
    public string UploadFile(string trimURL 
     , byte[] incomingArray 
     , string FileName 
     , string TrimRecordTypeName 
     , MetaData[] metaDataArray) 
    { 
    // body of UploadFile function here 

tôi nghĩ cung cấp một thuộc tính MessageName khác nhau trên đặc tính WebMethod sẽ khắc phục vấn đề này, nhưng đây là toàn bộ thông báo lỗi tôi nhận được:

Cả System.String UploadFileBasic (System.String, Byte [ ], System.String, System.String) và System.String UploadFile (System.String, Byte [], System.String, System.String) sử dụng t tên thông báo 'UploadFileBasic'. Sử dụng thuộc tính MessageName của thuộc tính tùy chỉnh WebMethod để chỉ định tên thông báo duy nhất cho các phương thức.

Dịch vụ web biên dịch OK; Tôi không thể thấy điều gì sai ở đây.

Trả lời

13

Đề xuất của tôi là không sử dụng tên phương thức quá tải. Không có khái niệm như vậy trong WSDL, vậy tại sao lại bận tâm?

+0

Tôi thấy lỗi cách của tôi bây giờ. Webclient của tôi có thể gọi UploadFile hoặc UploadFileBasic. Webservice của tôi xác định cả hai duy nhất bây giờ (không quá tải). Đáng kể hơn, nhờ một gợi ý khác ở đâu đó, mã cho UploadFileBasic bây giờ đơn giản là việc gọi UploadFile cung cấp một mảng trống làm tham số cuối cùng. Cảm ơn tất cả sự giúp đỡ của bạn, John. –

+0

Bài đăng này không thực sự trả lời câu hỏi, vậy tại sao phải bận tâm? – Gnial0id

+0

@ Gnial0id: hơn 5 năm trước, OP cảm thấy rằng đó là câu trả lời và 12 người khác cũng đã bỏ phiếu. Tại sao bận tâm bình luận về nó? Câu trả lời thực sự cho "làm thế nào để đối phó với các phương thức quá tải trong một dịch vụ web SOAP" là "SOAP không có khái niệm về các phương thức quá tải". –

0

Tôi thường có một đối tượng lớp phía sau giao diện dịch vụ web có các phương thức quá tải và sau đó tạo các phương thức riêng lẻ trong tệp asmx.cs của bạn với các tên khác nhau. Tôi biết bạn có thể sử dụng các thuộc tính nhưng nó chỉ làm cho IMID mã gọn gàng hơn.

7

Bạn cần thay đổi phần này:

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 

với trang này:

[WebServiceBinding(ConformsTo = WsiProfiles.None)] 
Các vấn đề liên quan