2012-05-09 17 views
9

Tôi đã được giao nhiệm vụ gửi dữ liệu đến dịch vụ web của bên thứ ba. dịch vụ được chứng minh là hoạt động với máy khách Java, tuy nhiên, nó không có trong .Net.Làm thế nào tôi có thể sửa đổi một XSD được tạo ra để khắc phục lỗi .Net đã biết để gây ra ngoại lệ "cs0030: Không thể tạo một lớp tạm thời"

Khi tôi tạo ra các dịch vụ proxy và một trong hai nhanh chóng các dịch vụ hoặc serialise đối tượng yêu cầu, tôi nhận được lỗi sau:

Unable to generate a temporary class (result=1). 
error CS0030: Cannot convert type 'TestStarXML.wsStarService.VSOptionInclusiveSetType[]' to 'TestStarXML.wsStarService.VSOptionInclusiveSetType' 
error CS0030: Cannot convert type 'TestStarXML.wsStarService.VSOptionConflictSetType[]' to 'TestStarXML.wsStarService.VSOptionConflictSetType' 
error CS0030: Cannot convert type 'TestStarXML.wsStarService.ColorRequirementSetType[]' to 'TestStarXML.wsStarService.ColorRequirementSetType' 
error CS0030: Cannot convert type 'TestStarXML.wsStarService.ColorExclusionSetType[]' to 'TestStarXML.wsStarService.ColorExclusionSetType' 
error CS0029: Cannot implicitly convert type 'TestStarXML.wsStarService.VSOptionInclusiveSetType' to 'TestStarXML.wsStarService.VSOptionInclusiveSetType[]' 
error CS0029: Cannot implicitly convert type 'TestStarXML.wsStarService.VSOptionConflictSetType' to 'TestStarXML.wsStarService.VSOptionConflictSetType[]' 
error CS0029: Cannot implicitly convert type 'TestStarXML.wsStarService.ColorRequirementSetType' to 'TestStarXML.wsStarService.ColorRequirementSetType[]' 
error CS0029: Cannot implicitly convert type 'TestStarXML.wsStarService.ColorExclusionSetType' to 'TestStarXML.wsStarService.ColorExclusionSetType[]' 

Đảng thứ 3 mà gửi cho chúng tôi dịch vụ này sử dụng Java, và họ không có vấn đề tạo proxy dịch vụ từ dịch vụ thử nghiệm. Sự hiểu biết của tôi cho đến nay là có một lỗi trong .Net (see here) tạo ra XSD cho tệp WSDL.

Trong câu trả lời here, nó đề cập đến việc sửa đổi XSD được tạo ra với các thuộc tính giả, vì vậy tôi đã thêm thuộc tính giả như đề xuất:

<xs:complexType name="VSInclusivesOptionType"> 
    <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="unbounded" name="VSOptionInclusiveSet" type="tns:VSOptionInclusiveSetType" /> 
    </xs:sequence> 
    <xs:attribute name="tmp" type="xs:string" /> <!-- this is all I have added (for each of the types in the exception message) --> 
    </xs:complexType> 
    <xs:complexType name="VSOptionInclusiveSetType"> 
    <xs:sequence> 
     <xs:element minOccurs="0" name="SetID" type="ns2:IdentifierType" /> 
     <xs:element minOccurs="0" name="NumberOfOptionsNumeric" type="xs:decimal" /> 
     <xs:element minOccurs="0" maxOccurs="unbounded" name="VSOption2" type="tns:VSOption2Type" /> 
    </xs:sequence> 
    </xs:complexType> 

Điều duy nhất thêm các thuộc tính giả đạt được là để giảm thời gian biên dịch của dự án từ vài phút đến vài giây.

Khác với điều này, VS2008 dường như không nhận thấy những thay đổi - Tôi vẫn không thể sắp xếp các đối tượng hoặc khởi tạo dịch vụ mà không nhận được ngoại lệ được đề cập ở trên, tôi đang thiếu hoặc làm sai?

+0

Chỉ là một câu hỏi kiểm tra vì có vẻ như bạn đã triển khai chính xác giải pháp được đề xuất trong bài đăng được liên kết. Có thể là vấn đề với VSInclusivesOptionType được giải quyết và bạn đang làm việc chống lại nestings của (3) datatypes khác được tham chiếu trong thông báo lỗi? (VSOptionConflictSetType; ColorRequirementSetType; ColorExclusionSetType)? – dcbyers

+0

@dcbyers Tôi đã triển khai các thay đổi ở trên cho tất cả 4 loại. –

Trả lời

7

Bạn phải thay đổi tệp XSD như trong câu hỏi của mình, nhưng bạn cũng phải sửa đổi tệp Reference.cs (hoặc .vb) trong cùng một thư mục - tôi đã tìm kiếm thay thế trên [] [] bằng [] (hoặc()() với() trong vb.net).

Trong tất cả các bài đọc tôi đã thực hiện, không có câu trả lời nào được nói là làm cả hai, vì vậy tôi chỉ bỏ lỡ điểm - Tôi hy vọng câu trả lời này sẽ giúp người khác.

+0

Cảm ơn câu hỏi và câu trả lời đó. Ở đây trong năm 2016 lỗi vẫn tồn tại :) – dariol

5

Bạn chính xác, đó là lỗi trong công cụ WSDL. Để sửa lỗi, bạn nên mở các tệp đã tạo và thay đổi một số 'TestStarXML.wsStarService.VSOptionConflictSetType' thành 'TestStarXML.wsStarService.VSOptionConflictSetType []'.

Khi chạy, bạn có thể dễ dàng tìm ra mục nào. Khi bạn đã thay đổi các loại, dịch vụ của bạn sẽ chạy tốt.

+0

Dường như (như bạn thấy) không có [] trong tập tin. Vì vậy, nó không phải là một trường hợp chỉ đơn giản là loại bỏ chúng? –

+0

Tôi nên chỉnh sửa tệp nào? –

+1

reference.cs là tệp hoặc nếu bạn đã tạo bằng tay (công cụ wsdl), bạn nên chỉnh sửa tệp đặt ra. Tôi không chắc chắn nếu bạn phải thêm hoặc xóa []. Khi tôi nhớ chính xác nó đã được trong một dòng định nghĩa lớp. – Peter

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