2011-02-08 27 views
7

Tôi có một phương pháp web với một chữ ký như thế này:Tôi có thể ngừng tham chiếu dịch vụ tạo ArrayOfString thay vì chuỗi [] không?

public string[] ToUpper(string[] values) 

Tôi đang sử dụng 'Thêm dịch vụ tham khảo' trong Visual Studio 2010 để tạo ra một tham chiếu đến dịch vụ của tôi. Thật không may, quá trình này tạo ra một lớp proxy gọi là 'ArrayOfString' và sử dụng kiểu này thay vì kiểu 'string []' được mong đợi. Các async tạo cuộc gọi dịch vụ chữ ký sẽ trông như thế này:

public void ToUpperAsync(Demo.ServiceReference.ArrayOfString values) { } 
public void ToUpperAsync(Demo.ServiceReference.ArrayOfString values, object userState) { } 

Tôi đã thử tất cả các tùy chọn của 'Bộ sưu tập' thả xuống trên các hình thức dịch vụ tham khảo cấu hình và nó dường như không phải là tạo sự khác biệt.

Điều này đã hoạt động trước đó, nhưng vì một lý do nào đó nó đột nhiên ngừng hoạt động, có lẽ sau khi xóa phương thức web khác khỏi dịch vụ.

Làm cách nào để nhận lớp tham chiếu dịch vụ được tạo để sử dụng loại chuỗi [] thay vì loại ArrayOfString được tạo? Bất kì sự giúp đỡ nào trong việc này đều rất được trân trọng.

EDIT: Như @Oleg gợi ý, tôi đang sử dụng dịch vụ web ASMX.

+0

có lẽ phương thức dịch vụ của bạn đang trả về danh sách chuỗi - hãy xem http: // stackoverflow.com/questions/505943/can-i-stop-my-wcf-tạo-arrayofstring-thay-of-string-hoặc-liststring – VinayC

+0

@VinayC: Tôi đã đọc câu hỏi đó trước, mặc dù tác giả đã yêu cầu câu trả lời cho một trong hai hai câu hỏi của anh ấy. Tôi muốn biết câu trả lời cho câu hỏi "Có cách nào để nói với nó không để tạo ra ArrayOfString", mà không được trả lời trong bài viết đó. –

Trả lời

5

Tôi có thể tạo lại sự cố của bạn khi thêm "Tham chiếu dịch vụ" vào dịch vụ web kiểu ASMX. Tuy nhiên, khi thêm "Service refernce" vào một dịch vụ WCF hoặc "Web reference" vào một đối số dịch vụ ASMX là kiểu string [].

Theo điều này, tôi nghĩ rằng bạn có thể khắc phục sự cố của mình bằng cách thay thế "Tham chiếu dịch vụ" bằng "Tham chiếu web".

Nhấn nút "Nâng cao ..." trên "Thêm hộp thoại tham chiếu dịch vụ". Add service reference

Bấm "Thêm tài liệu tham khảo web ..." url dịch vụ Advanced

Insert và thêm tài liệu tham khảo web Add web reference

+0

@Oleg: "Tham khảo web" sử dụng công nghệ ASMX cũ, được Microsoft coi là một "công nghệ kế thừa". –

+0

@ John: Bạn là 100% đúng, nhưng khi tôi hiểu Luke Baulch đã có dịch vụ web ASMX. Như tôi đã đề cập trong câu trả lời của tôi, sự cố chỉ có thể tái tạo khi sử dụng "Tham chiếu dịch vụ" với dịch vụ ASMX. Với WCF, mọi thứ đều ổn. Đó là lý do tại sao tôi cho rằng dịch vụ ASMX được sử dụng và đề xuất "Tham khảo web" thay vì "Tham khảo dịch vụ". Một lý do khác để nghĩ rằng dịch vụ ASMX cũ được sử dụng là trong câu hỏi "Phương pháp web" được đề cập nhưng không phải là "Hợp đồng hoạt động". –

+0

@Oleg: "hai sai lầm không thực hiện đúng". Chỉ vì ASMX được sử dụng trên servide không có nghĩa là nó nên được sử dụng ở phía máy khách. –

2

Quá trễ nhưng có thể giúp mọi người trong tương lai ...

Sử dụng svcutil và thông báo rõ ràng cho dòng lệnh util mà bạn muốn lớp proxy được tuần tự hóa bởi XmlSerializer chứ không phải DataContractSeri alizer (mặc định). Dưới đây là các mẫu:

svcutil /out:c:\Path\Proxy.cs /config:c:\Path\Proxy.config/async/serializer: XmlSerializer/namespace: *, YourNamespace http://www.domain.com/service/serviceURL.asmx

Lưu ý rằng dịch vụ web là một dịch vụ web ASP.NET ok ?!

11

thay đổi này thành XmlSerializer có thể được thực hiện bên trong tệp Reference.svcmap. Mở nó bên trong thư mục Service Reference và thay đổi nút Serializer xml từ "Auto" thành "XmlSerializer" để giải quyết vấn đề! Chúc mừng

+0

Hoàn hảo. Giải quyết "ArrayOfXXX" ngớ ngẩn đến Danh sách nội dung và không sử dụng công nghệ cũ. Nice one :) –

+0

Điều này đã giúp tôi! Cảm ơn bạn! – AndeeC

+0

Điều này giải quyết được vấn đề cho tôi. Cảm ơn bạn! :) – Leonard

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