Tôi có thể thấy đối tượng trong Fiddler nhưng đối tượng không phải là deserializing trên đầu của tôi. Có ai thấy điều này trước đây không?Thuộc tính trong đối tượng phản hồi sau khi cuộc gọi webservice là null
Trả lời
Lý do duy nhất tôi có thể nghĩ là hợp đồng không khớp. Mặc dù nó là lạ nếu không có lỗi xác nhận được ném. Bạn có đang sử dụng một ứng dụng khách được tạo từ WSDL chính xác không? Nó là một khách hàng WCF hoặc một SOAP? Cái trước đây không xác nhận, tôi chắc chắn, nhưng lược đồ không phù hợp có thể trượt qua sau này.
Điều này xảy ra khi tạo lớp proxy từ công cụ wsdl và khi thêm nó làm tham chiếu dịch vụ thông qua GUI VS2010. Đây là một khách hàng SOAP. – Sean
Sử dụng svcutil.exe, không phải wsdl.exe. Hoặc chỉ cần sử dụng "Thêm tham chiếu dịch vụ" và trỏ đến điểm cuối WSDL hoặc siêu dữ liệu. –
Tôi có chính xác cùng một vấn đề như thế này - các không gian tên tôi thấy trong phản hồi WSDL và XML (trong Fiddler) là hoàn toàn giống nhau. Cũng sử dụng đối tượng SOAP. Đối tượng phản hồi là một trình bao bọc đơn giản xung quanh một mảng chung (từ các máy chủ (Java) được chú thích với @XmlElementRefs ({@ XmlElementRef (type = Class1.class, ...}) XML được chuyển tới máy khách C# có vẻ tốt như sau:
"Trả lời là không" hoặc "Trả lời chứa null" hoặc "Yêu cầu không có giá trị" hoặc "Yêu cầu chứa null" gần như luôn có nghĩa là bạn có không gian tên không khớp. Ví dụ, phản ứng có thể chứa:
<response xmlns="http://foo.com"/>
nhưng nên trong thực tế có thể
<response xmlns="http://bar.com"/>
Trong trường hợp này, null sẽ được nhận.
YES – mikey
Mỗi khi điều này xảy ra với tôi, đó là vì tôi cần cập nhật các tham chiếu dịch vụ của mình. Hãy thử điều đó và cho tôi biết điều gì sẽ xảy ra :)
Cảm ơn bạn đã trả lời nhưng tôi tin tưởng, tôi đã xóa và tái tạo khoảng một nghìn lần = ( Tuy nhiên, có thể tôi đang thiếu một thứ gì đó đơn giản hoặc đang tạo ra một sai lầm ngu ngốc ở một nơi khác (ứng dụng C# đầu tiên của tôi) Tôi đã thử với VS 2010 và SharpDevelop, tất cả đều không có ích ... – earcam
Ok, tôi sẽ đánh giá cao vì bạn đã hỏi câu hỏi nếu bạn có thể làm điều đó một lần nữa mặc dù xin vui lòng. I E. cập nhật tham chiếu dịch vụ thay vì xóa và tạo lại. Giả sử rằng không hoạt động, nó sẽ là lý tưởng để xem định nghĩa/hợp đồng cho (các) đối tượng và phương thức liên quan :) –
Tôi đã làm mới trong SharpDevelop và nó giống như trước đây. Khi tôi làm mới tham chiếu WebService trong VS Express 2010, nó đã thay đổi không gian tên C# tiền tố không gian tên mặc định của dự án thành tham chiếu dịch vụ (như DefaultNamespace.ServiceReference). Thực thi từ một trong hai kết quả IDE trong cùng một đối tượng phản hồi với các trường rỗng. – earcam
Giải quyết nó ... hoặc ít nhất có giải pháp thay thế. Trong mã Java, @XmlElementRefs và @XmlElementRef phải là @XmlElements và @XmlElement tương ứng (cũng như thuộc tính "type", nó cần thuộc tính "name").
Đoán xem tôi có đăng câu hỏi này như một câu hỏi mới với thẻ Java cũng như C# và dịch vụ web, một số stackoverflower hawk mắt sẽ phát hiện lỗi học sinh này.
Tôi gặp sự cố tương tự mà tôi đã giải quyết bằng cách kiểm tra giá trị Đơn đặt hàng trong Reference.cs. [System.Xml.Serialization.XmlElementAttribute (Order = 0)]
Thứ tự của tham số trả về đã thay đổi nhưng cập nhật tham chiếu dịch vụ của tôi trong phòng thu trực quan không thay đổi giá trị "Đặt hàng".
Kiểm tra tham số được trả về trong Fiddler/SoapUI giống như trong lớp được tạo proxy của bạn.
Tôi có trường hợp tương tự khi tạo khách hàng qua SVCUTIL/Tham khảo dịch vụ từ VS. Phản hồi đã được nhận thành công với dữ liệu chính xác (được xác nhận thông qua phương thức IClientMessageInspector.AfterReceiveReply) tuy nhiên các giá trị ở cấp đối tượng không được phổ biến. Không có lỗi de-serialization (xác nhận qua sản lượng System.Diagnostics)
Vấn đề là hai khía cạnh:
1) Một số đối tượng đã được đặt tên chính xác như các loại của họ, nhưng có không gian tên khác nhau từ các loại của họ. Điều này dường như đã nhầm lẫn trình tạo proxy trong việc gán tham số không gian tên (trong chú thích System.Xml.Serialization.XmlElementAttribute) của lớp vào một đối tượng
2) Tham số thứ tự (trong System.Xml. Serialization.XmlElementAttribute chú thích) của các thuộc tính không cần thiết và cũng là tham số namespace đã mất tích
như vậy từ: [System.Xml.Serialization.XmlElementAttribute (IsNullable = true, Order = 0)]
cho: [ System.Xml.Serialization.XmlElementAttribute (IsNullable = true, Namespace = "http: //www.whathevernamespaceiscorrect.Vì vậy về cơ bản, trong proxy được tạo, tôi cần sửa chữa không gian tên của lớp thành không gian tên được chỉ định trong loại và thay thế tham số thứ tự bằng tham số không gian tên đặt nó vào không gian tên chính xác theo wsdl
tôi đã cùng một vấn đề, và như đề xuất các vấn đề không gian tên là cause.However gốc, lớp proxy của tôi đã lồng các lớp học và chuỗi dài của namespace lồng nhau.
Đó là khó hiểu để xác định không gian tên đúng áp dụng trong mã Cs cho lớp proxy.Tại đây, tôi mô tả cách tìm ra không gian tên cần được cập nhật trong proxy của máy khách.
Những gì tôi đã làm là chặn yêu cầu trong lớp ClientMessageInspector, phương thức AfterReceiveReply (Cho phép kiểm tra hoặc sửa đổi thông báo sau khi nhận được một tin nhắn trả lời nhưng trước khi chuyển nó trở lại ứng dụng khách.) Đã xác minh không gian tên của đối tượng trả về null trong phản hồi bằng cách sử dụng XMLDocument. Tôi đã cập nhật lớp proxy với không gian tên được truy xuất từ XML. Sau khi thực hiện các thay đổi, các đối tượng không được trả về null.
public class MyMessageInspector : IClientMessageInspector
{
public void AfterReceiveReply(ref System.ServiceModel.Channels.Message request, object correlationState)
{
MemoryStream ms = new MemoryStream();
XmlWriter writer = XmlWriter.Create(ms);
request.WriteMessage(writer);
writer.Flush();
ms.Position = 0;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(ms);
this.ReadMessage(xmlDoc);
ms = new MemoryStream();
xmlDoc.Save(ms);
ms.Position = 0;
XmlReader reader = XmlReader.Create(ms);
Message newMessage = Message.CreateMessage(reader, int.MaxValue, request.Version);
newMessage.Properties.CopyProperties(request.Properties);
request = newMessage;
}
private void ReadMessage(XmlDocument xmlDoc)
{
XmlNode v1 = xmlDoc.GetElementsByTagName("XPAth");
//Actual Namespace in XML, which should be used in Proxy Class
string namespaceURIForObjectInXML = v1.NamespaceURI;
}
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
}
}
Đảm bảo định nghĩa/đặc điểm kỹ thuật khớp với đầu ra. So sánh WSDL (trong trình duyệt) và phản hồi (trong SOAP-UI, Fiddler), ví dụ:
- WSDL sử dụng trường hợp lạc đà (lastName) và
- phản ứng sử dụng dấu gạch dưới (last_name).
- 1. Phát: Phản hồi webservice nhị phân
- 2. PHP: đối tượng là NULL ngay sau khi tạo
- 3. @ trong thuộc tính đối tượng là gì?
- 4. Cuộc gọi là mơ hồ giữa các phương thức hoặc thuộc tính sau
- 5. Thẻ đối tượng phản hồi HTTP là gì?
- 6. Khi nào là đối tượng thuộc tính được tạo?
- 7. Lỗi trả về cuộc gọi Webservice 500
- 8. Cặp yêu cầu-phản hồi được gọi là gì?
- 9. Đối tượng Mysqli mới là Null
- 10. Loại bỏ các phản hồi 401 "Không được phép" theo sau là 200 phản hồi "Ok"
- 11. Kết quả phản hồi bộ nhớ cache (thuộc tính lớp)
- 12. Thay đổi đối tượng phản hồi từ OWIN Middleware
- 13. Cách xử lý cuộc gọi ajax khi không có phản hồi từ máy chủ
- 14. Cách ghi vào đối tượng phản hồi HttpServletResponse?
- 15. Truy cập đối tượng DOM sau khi gọi AJAX?
- 16. C# Thuộc tính tự động - Vẫn còn null sau + =?
- 17. Đọc phản hồi với Nokogiri từ cuộc gọi SOAP với Savon
- 18. LINQ to đối tượng khi đối tượng là null VS LINQ to SQL
- 19. Không thể nhận giá trị của thuộc tính ____: đối tượng là null hoặc không xác định
- 20. find_or_create_by nhiều thuộc tính không tìm thấy bản ghi khi được gọi trong ngữ cảnh của đối tượng thuộc đối tượng (AR lỗi trong 2.3.11?)
- 21. chủ đối tượng không phải là null hoặc đặt trong parameters.scheme = null, chủ = null
- 22. Xử lý đối tượng phản hồi của Android Facebook API
- 23. GDB ngắt cuộc gọi hàm đối tượng
- 24. ASP.NET MVC đọc thuộc tính khi đối tượng được tạo
- 25. Phương pháp # đối tượng và phản hồi động
- 26. Nút Android không phản hồi sau khi hoạt ảnh
- 27. Làm cách nào để chỉ phản hồi cử chỉ chạm một lần trong khi để các đối tượng phía sau phản ứng với các thao tác nhấn đúp?
- 28. jQuery nhận phản hồi từ tệp php sau khi đăng
- 29. Cách đọc luồng phản hồi trước khi phản hồi Http hoàn thành
- 30. Nhiều cuộc gọi WS trong một hành động, cách xử lý các đối tượng Promise?
Tôi có cùng một vấn đề và hiện đang kéo tóc của tôi ra (đặc biệt là dường như không có cách nào để gỡ lỗi mã M $ C# để deserializes WS). – earcam