- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在开发一个 Android 应用程序,它需要连接到 .NET SOAP 网络服务并根据响应生成/填充大量对象。我对网络服务和 SOAP 完全陌生,对 Android 也比较陌生。 Web 服务已经构建(不是由我构建)。
我一直在尝试查找有关在 Android 中连接到 SOAP 网络服务的信息。两个基本建议似乎是:
我查看了 KSOAP2 的各种教程,但它们似乎都只涉及最基本的原始类型,例如发送 2 个整数以获取 1 个整数,或发送和接收字符串;但是,我需要来回发送自定义对象。
是否可以使用 KSOAP2 发送和接收自定义对象?如果是这样,这有多容易/困难?是否必须解析 XML 才能“手动”创建/填充对象?
编辑/更新:在尝试连接到现有 Web 服务一段时间后(接受一个字符串并返回一个复杂对象)并出现错误,我决定尝试一种更简单的方法。我连接到一个更简单的 web 服务,它不带参数,并返回一个 int。这个更简单的 Web 服务托管在与原始 Web 服务相同的位置,现在这个简单的 Web 服务对我来说运行良好。
进一步更新:现在一切正常!原来我只是遇到了一个大写错误,这导致了我的参数丢失。
最后一个问题是“national”与“National”。这是 soapUI 生成的代码:
XXXXXXX
以及由我的 Java 生成的请求代码:
XXXXXXXX
我最终的 java 代码是:
public void webServiceCall() {
String NAMESPACE = "http://tempuri.org/";
String METHOD_NAME = "GetClientByNationalID";
String SOAP_ACTION = "http://tempuri.org/IClientService/GetClientByNationalID";
// unsecure service
String URL = "http://XXXXXXXXXXXXXXXXXXXX.net/FPUnSecureService/ClientService.svc";
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
String clientID = "XXXXXXX";
PropertyInfo pi = new PropertyInfo();
pi.setName("nationalID");
pi.setValue(clientID);
pi.setType(clientID.getClass());
request.addProperty(pi);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
envelope.addMapping(NAMESPACE, "GetClientByNationalID", new ClientID().getClass());
Marshal floatMarshal = new MarshalFloat();
floatMarshal.register(envelope);
HttpTransportSE t = new HttpTransportSE(URL);
ClientID client = new ClientID();
t.debug = true;
thử {
Log.i("webServiceCall", "Trying call to web service");
t.call(SOAP_ACTION, envelope);
SoapObject response = (SoapObject) envelope.getResponse();
Log.i("success", response.getPropertyAsString(0));
Log.i("success", response.getPropertyAsString(1));
Log.i("success", response.getPropertyAsString(2));
Log.i("success", response.getPropertyAsString(3));
Log.i("success", response.getPropertyAsString(4));
} catch (Ngoại lệ e) {
Log.e("webServiceCall", "Error calling webservice.");
e.printStackTrace();
System.out.println("Request: " + t.requestDump);
System.out.println("Response: " + t.responseDump);
}
}
我仍然对这些行感到困惑:
envelope.addMapping(NAMESPACE, "GetClientByNationalID", new ClientID().
Marshal floatMarshal = new MarshalFloat();
floatMarshal.register(envelope);
我想我在将对象作为参数传递时添加了 Marshal 部分,但我不确定是否还需要它们。我也不确定 addMapping 调用,以及我应该在其中包含什么。谢谢。
câu trả lời hay nhất
使用 ksoap2,并通过以下链接中的ví dụ về mã检查我的答案:Link1 , link2 , link3 .我写了一些细节,可以帮助您了解如何开始编码。
如果您需要帮助,请告诉我。
更新(回答您关于映射和编码的问题)
当您通过 soap 信封gửi复杂类型(即对象)时,您可以使用 addMapping。 Web 服务将如何识别复杂类型?您需要在本地创建一个实现 kvmserializable 的类(如我的链接中所述),该类将与服务器上的对象具有相同的参数,然后您需要在它和映射的类之间添加映射在服务器上添加到它,以便在服务器上解析时信封知道这个复杂类型 X 映射到服务器上的类 X。因此,如果您不发送复杂类型,则不需要添加映射。(PS:我看到您没有发送复杂类型,因为 nationalID 是字符串类型。如果说 nationalID 是复杂类型VỚI 你会这样做:addMapping(NAMESPACE, Z.class.getSimpleName(), Z.class) )
至于编码,它使用 java 序列化将对象更改为要在 Web 服务上解码的数据流。因此,当您发送复杂类型时,根据我的经验,添加编码以通过序列化将复杂类型更改为数据流是一个很好的做法。如果您发现不需要它就不要添加它,但了解那里有哪些选项总是好的。
关于android - 在 Android 中从基于 SOAP 的 .NET Web 服务接收自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9130984/
Tôi có một ứng dụng lưu trữ các vectơ cấu trúc. Các cấu trúc này chứa thông tin về từng GPU trên hệ thống, chẳng hạn như bộ nhớ và giga-flop/s. Có số lượng GPU khác nhau trên mỗi hệ thống. Tôi có một chương trình chạy trên nhiều máy cùng lúc và tôi cần thu thập dữ liệu này
Tôi tò mò về việc thiếu chức năng này trong MPI: MPI_Isendrecv( ... ); tức là gửi và nhận không chặn, ai đó có thể cho tôi biết lý do đằng sau sự thiếu sót của nó không? Câu trả lời hay nhất Ý kiến của tôi là MPI_SENDRECV tồn tại để tạo điều kiện thuận lợi cho những ai muốn
Khi tôi nghe ổ cắm TCP hoặc UDP với ssize_t recv(int sockfd, void *buf, size_t len, int flags hoặc ssize_t recvfrom);
TỔNG: Làm cách nào để trì hoãn việc kích hoạt sự kiện hoặc tiếp nhận sự kiện trong Azure Event Grid? Hệ thống tôi đang thiết kế yêu cầu sử dụng React cho các trạng thái đối tượng tần số thấp (tạo, khởi động, kiểm tra trạng thái khởi động dài hạn, chấm dứt). Nó trông giống như một ứng cử viên để xử lý sự kiện. Tôi muốn sử dụng chức năng Azure
Tôi đang triển khai một chương trình trong MPI trong đó quy trình chính (cấp = 0) có thể nhận được yêu cầu từ các quy trình khác yêu cầu các giá trị biến mà chỉ root mới biết. Nếu tôi thực hiện MPI_Recv(...) ở cấp 0, tôi phải chỉ định
Tôi đang học DX12 và đang trong quá trình học "Win32 cũ". Tôi gặp sự cố khi thoát khỏi vòng lặp chính, điều này dường như có liên quan đến việc tôi không nhận được thông báo WM_CLOSE. Trong C++, ứng dụng bảng điều khiển Windows 10. #bao gồm
TỔNG: Làm cách nào để trì hoãn việc kích hoạt sự kiện hoặc tiếp nhận sự kiện trong Azure Event Grid? Hệ thống tôi đang thiết kế yêu cầu sử dụng React cho các trạng thái đối tượng tần số thấp (tạo, khởi động, kiểm tra trạng thái khởi động dài hạn, chấm dứt). Nó trông giống như một ứng cử viên để xử lý sự kiện. Tôi muốn sử dụng chức năng Azure
Tôi muốn viết phương pháp gửi sms theo số và sử dụng văn bản trong trường văn bản chỉnh sửa. Sau khi gửi tin nhắn, tôi muốn nhận được một số âm thanh hoặc thứ gì đó để nhắc nhở tôi rằng tôi đã nhận được tin nhắn. Làm thế nào tôi có thể làm điều này? Cảm ơn bạn trước, Sói. Câu trả lời hay nhất Trang web này dường như có mô tả hay về cả hai: ht
Vì vậy, tôi đang viết một chương trình bằng Java để gửi và nhận dữ liệu với sự trợ giúp của DatagramSocket và DatagramPacket. Vấn đề là ở đâu đó trong khoảng thời gian tôi gửi dữ liệu/nhận dữ liệu - trong chương trình tôi đang gửi dữ liệu tới
Tôi mới làm quen với lập trình Android và tôi đang viết một ứng dụng bằng Java để mở máy ảnh để chụp ảnh và lưu ảnh. Tôi đã làm điều đó thông qua Intents nhưng tôi không thấy onActivityResult đang chạy. Tôi đã rồi
Tôi có một máy chủ socket và một máy khách socket. Máy khách chỉ có một ổ cắm. Tôi phải sử dụng các luồng để gửi/nhận dữ liệu ở phía máy khách. int tĩnh sock = -1; static std::mutex mutex;
Tôi đang cố gắng triển khai máy chủ/máy khách TCP bằng cách sử dụng các ổ cắm trong c. Tôi đã viết chương trình theo cách mà mọi thứ chúng tôi gửi trên máy khách đều được hiển thị từng dòng trong máy chủ cho đến khi gõ lệnh thoát. Chương trình chạy nhưng cuối cùng dữ liệu lại hiển thị trên máy chủ. Có ai có thể
Tôi đang sử dụng MicroController để giao tiếp với mô-đun SIM808 và tôi muốn gửi và nhận lệnh AT. Bây giờ vấn đề là đối với một số lệnh, tôi chỉ nhận được một phần câu trả lời mà lẽ ra tôi phải nhận, nhưng đối với một số lệnh khác, tôi nhận được những gì tôi phải nhận.
Tôi đã thiết kế giao diện truyền tin nhắn trong C để cung cấp liên lạc giữa các quy trình khác nhau đang chạy trong hệ thống của tôi. Giao diện tạo ra 10-12 luồng cho mục đích này và cung cấp giao tiếp bằng cách sử dụng các ổ cắm TCP. nó hoạt động chính xác
Tôi cần làm rõ về việc sử dụng nhiều lần gửi/nhận trong chương trình ổ cắm. Chương trình khách hàng của tôi trông như bên dưới (sử dụng TCP SOCK_STREAM). send(sockfd,"Messgfromclient",15,0);
Tôi đang xây dựng một máy chủ proxy thực sự cơ bản vào máy chủ HTTP hiện có của mình. Thêm kết nối đến vào hàng đợi và gửi tín hiệu đến một luồng trong một hàng đợi khác của các luồng đang chờ. Chuỗi này nhận các kết nối đến từ hàng đợi và xử lý chúng. Vấn đề là đại lý thực sự chậm.
Tôi đang thiết lập một tuyến đường tương tự bằng cách sử dụng $routeProvider when('/grab/:param1/:param2', { control: 'someController',
Tôi có một máy chủ phát trực tuyến thương mại ở Châu Âu phát trực tuyến qua HLS. http://europe.server/stream1/index.m3u8 Hiện tại, khách hàng của tôi ở Mỹ đang gặp một số vấn đề về mạng do khoảng cách. Vì vậy tôi đã triển khai các máy chủ mới ở Hoa Kỳ
Tôi có một nhiệm vụ cần tây đang chạy dài, trải qua một loạt dự án và thực hiện một số thao tác. Nhiệm vụ phải báo cáo về dự án hiện đang được thực hiện theo cách nào đó để người dùng cuối biết được tiến độ của nhiệm vụ. Hiện tại, ứng dụng django của tôi có cần tây
Tôi cần gửi tệp âm thanh từ trình duyệt tới Bộ điều khiển python. Đây là những gì tôi làm: var xmlHttp = new XMLHttpRequest(); xmlHttp.open( "POST",
Tôi là một lập trình viên xuất sắc, rất giỏi!