Khi tôi nhập một dịch vụ nhất định bằng cách sử dụng "Thêm dịch vụ tham khảo" trên Visual Studio 2008 (SP1) tất cả các thông điệp yêu cầu/phản hồi đang được đặt không cần thiết vào các hợp đồng tin nhắn (có tên -> "operationName "+" Yêu cầu "/" Phản hồi "+" 1 "ở cuối).Thêm tham chiếu dịch vụ tạo hợp đồng tin nhắn
Các bộ tạo mã nói:
// CODEGEN: Generating message contract since the operation XXX is neither RPC nor
// document wrapped.
Các anh chàng đang tạo ra WSDL từ một dịch vụ Java cho biết họ đang xác định TÀI LIỆU-đen/bọc.
Bất kỳ trợ giúp/con trỏ/đầu mối nào sẽ được đánh giá cao.
Cập nhật: đây là mẫu wsdl của tôi cho một trong các thao tác có vẻ đáng ngờ. Lưu ý sự không khớp trên thuộc tính phần tử thư cho yêu cầu, so với phản hồi.
<!- imports namespaces and defines elements -->
<wsdl:types>
<xsd:schema targetNamespace="http://WHATEVER/" xmlns:xsd_1="http://WHATEVER_1/" xmlns:xsd_2="http://WHATEVER_2/">
<xsd:import namespace="http://WHATEVER_1/" schemaLocation="WHATEVER_1.xsd"/>
<xsd:import namespace="http://WHATEVER_2/" schemaLocation="WHATEVER_2.xsd"/>
<xsd:element name="myOperationResponse" type="xsd_1:MyOperationResponse"/>
<xsd:element name="myOperation" type="xsd_1:MyOperationRequest"/>
</xsd:schema>
</wsdl:types>
<!- declares messages - NOTE the mismatch on the request element attribute compared to response -->
<wsdl:message name="myOperationRequest">
<wsdl:part element="tns:myOperation" name="request"/>
</wsdl:message>
<wsdl:message name="myOperationResponse">
<wsdl:part element="tns:myOperationResponse" name="response"/>
</wsdl:message>
<!- operations -->
<wsdl:portType name="MyService">
<wsdl:operation name="myOperation">
<wsdl:input message="tns:myOperationRequest"/>
<wsdl:output message="tns:myOperationResponse"/>
<wsdl:fault message="tns:myOperationFault" name="myOperationFault"/>
<wsdl:fault message="tns:myOperationFault1" name="myOperationFault1"/>
</wsdl:operation>
</wsdl:portType>
Cập nhật 2: Tôi kéo tất cả các loại mà tôi đã có trong namespace nhập khẩu của tôi (họ trong một xsd riêng) vào wsdl, như tôi nghi ngờ việc nhập khẩu có thể được kích hoạt các thế hệ đồng tin nhắn. Trước sự ngạc nhiên của tôi, nó không phải là trường hợp và có tất cả các loại được định nghĩa trong wsdl đã không thay đổi bất cứ điều gì.
Tôi sau đó (tuyệt vọng) bắt đầu xây dựng wsdls từ đầu và chơi với thuộc tính phần tử trong thuộc tính chuỗi tôi đã có thể tạo lại hành vi tạo hợp đồng thư không mong muốn.
Dưới đây là một ví dụ của một phần tử:
<xsd:element name="myElement">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="1" name="arg1" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
Chơi với maxOccurs
trên các yếu tố được sử dụng như tin nhắn (tất cả các yêu cầu và đáp ứng về cơ bản) sau đây sẽ xảy ra:
- maxOccurs = "1" không kích hoạt gói
- macOcccurs> 1 kích hoạt gói
- maxOccurs = "vô biên" kích hoạt gói
Tôi đã không thể tái sản xuất này trên wsdl sản xuất của tôi chưa vì làm tổ của các loại đi rất sâu, và nó sẽ đưa tôi thời gian để kiểm tra nó kỹ lưỡng. Trong khi đó tôi hy vọng nó có thể rung chuông - bất kỳ sự trợ giúp nào được đánh giá cao.
cũng lưu ý - rằng tôi nhận được lỗi đó trên tất cả các thao tác không chỉ trên một tính năng cụ thể. Tôi dường như hiểu điều này có thể là do một lỗi trên BẤT CỨ của các định nghĩa loại được sử dụng bởi BẤT CỨ của các hoạt động, điều này sẽ gây ra DataContractSerialer được thay thế bởi XmlSerializer, do đó các MEssageContracts. Liệu sự giải thích này có ý nghĩa gì không? – JohnIdol