我需要从我的C#应用程序进行XMLRPC调用,但我没有找到任何帮助.当我使用Ruby的XMLRPC时,它很简单:
server = XMLRPC::Client.new2("http://server/api.php")
result = server.call("remote.procedure", [1, [['crit1', 'crit2', 'crit3']]])
Run Code Online (Sandbox Code Playgroud)
是否有类似的C#库?
我的公司已经使用XML-RPC一段时间了,但最近我想知道XML-RPC与普通XML相比有什么好处.首先,它是可怕的"肥胖",考虑:
<struct>
<member>
<name>ROOM_ID</name>
<value>
<int>1</int>
</value>
</member>
<member>
<name>CODE</name>
<value>
<string>MR-101</string>
</value>
</member>
<member>
<name>NAME</name>
<value>
<string>Math Room</string>
</value>
</member>
<member>
<name>CAPACITY</name>
<value>
<int>30</int>
</value>
</member>
</struct>
Run Code Online (Sandbox Code Playgroud)
与此相比:
<room><ROOM_ID>1</ROOM_ID><CODE>MR-101</CODE>
<NAME>Math Room</NAME><CAPACITY>30</CAPACITY></room>
Run Code Online (Sandbox Code Playgroud)
甚至这个:
<room ROOM_ID=1 CODE=MR-101 NAME=”Math Room” CAPACITY=30 />
Run Code Online (Sandbox Code Playgroud)
其次,XML-RPC似乎相当普遍,但并不是普遍存在,我对C++和PHP中对它的支持印象不深.我在两种语言中尝试过的所有库都遇到了问题.
第三,在我看来,我可以像使用XML-RPC一样使用纯XML进行远程过程调用.{(9/9/2009):每种语言都有用于将语言级对象序列化为XML的库.XML和XML-RPC都需要定义应用程序级模式,例如,字段应如何拼写,但不需要定义任何其他模式.许多人使用纯XML进行RPC调用.}
那么XML-RPC的增值是什么?
当我尝试安装xmlrpclib时,我在python 3.4版中遇到以下错误
下载/解压缩xmlrpclib无法找到满足要求的任何下载xmlrpclib忽略了一些外部托管文件(使用--allow-external xmlrpclib允许).正在清理...找不到xmlrpclib的所有发行版在/home/shiva/.pip/pip.log中存储失败的调试日志
如何在python 3.4中安装xmlrpclib?
正如标题所述,我正在尝试建立一个Ubuntu 16.04系统来处理rails应用程序.当我注释掉fog gem时,服务器在本地启动,并且在其中留下gem会产生下面的错误消息.谷歌搜索似乎没有提供任何东西,因为我找不到其他人与我有相同的错误,我不能简单地从应用程序中删除宝石,因为它是需要的.
完整信息如下:
/home/mark/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require': cannot load such file -- xmlrpc/client (LoadError)
from /home/mark/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `block in require'
from /home/mark/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:259:in `load_dependency'
from /home/mark/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require'
from /home/mark/.rvm/gems/ruby-2.4.0/gems/fog-1.28.0/lib/fog/xenserver/core.rb:15:in `<class:Connection>'
from /home/mark/.rvm/gems/ruby-2.4.0/gems/fog-1.28.0/lib/fog/xenserver/core.rb:14:in `<module:XenServer>'
from /home/mark/.rvm/gems/ruby-2.4.0/gems/fog-1.28.0/lib/fog/xenserver/core.rb:5:in `<module:Fog>'
from /home/mark/.rvm/gems/ruby-2.4.0/gems/fog-1.28.0/lib/fog/xenserver/core.rb:4:in `<top (required)>'
from /home/mark/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require'
from /home/mark/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `block in require'
from /home/mark/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:259:in `load_dependency'
from /home/mark/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require'
from /home/mark/.rvm/gems/ruby-2.4.0/gems/fog-1.28.0/lib/fog/xenserver/compute.rb:1:in `<top (required)>'
from /home/mark/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require'
from /home/mark/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `block in require'
from /home/mark/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:259:in `load_dependency'
from /home/mark/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require'
from /home/mark/.rvm/gems/ruby-2.4.0/gems/fog-1.28.0/lib/fog/xenserver.rb:1:in `<top (required)>'
from /home/mark/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require'
from /home/mark/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `block in …Run Code Online (Sandbox Code Playgroud) 我想编写Python代码以将文件从客户端发送到服务器.服务器需要保存从客户端发送的文件.但我的代码有一些我无法解决的错误.以下是我的服务器代码:
# server.py
from SimpleXMLRPCServer import SimpleXMLRPCServer
import os
server = SimpleXMLRPCServer(('localhost', 9000))
def save_data(data):
handle = open("x123.dat", "wb")
handle.write(data)
handle.close()
server.register_function(save_data, 'save_data')
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)
和客户端代码:
# client.py
import sys, xmlrpclib
proxy = xmlrpclib.Server('http://localhost:9000')
handle = open(sys.argv[1], "rb")
proxy.save_data(handle.read())
handle.close()
Run Code Online (Sandbox Code Playgroud)
但后来我运行我的代码,客户端返回以下错误(这是在Windows上):
Traceback (most recent call last):
File "client.py", line 6, in <module> proxy.save_data(handle.read())
File "c:\python27\lib\xmlrpclib.py", line 1224, in __call__
return self.__send(self.__name, args)
File "c:\python27\lib\xmlrpclib.py", line 1575, in __request
verbose=self.__verbose
File "c:\python27\lib\xmlrpclib.py", line 1264, in request
return self.single_request(host, handler, request_body, verbose)
File …Run Code Online (Sandbox Code Playgroud) 我想为使用XML-RPC的应用程序编写一个GUI包装器,并想知道是否有任何可用于Cocoa的XML-RPC框架,如果有,那么什么是最好的?
提前致谢
更新:我在下面的回答中提供了完整的代码示例.
我已经构建了自己的小型自定义XML-RPC服务器,因为我想在服务器端和客户端都保持简单,我想要完成的是使用WCF创建一个最简单的客户端(最好是C#) .
假设通过XML-RPC公开的服务合同如下:
[ServiceContract]
public interface IContract
{
[OperationContract(Action="Ping")]
string Ping(); // server returns back string "Pong"
[OperationContract(Action="Echo")]
string Echo(string message); // server echoes back whatever message is
}
Run Code Online (Sandbox Code Playgroud)
因此,有两个示例方法,一个没有任何参数,另一个带有简单的字符串参数,两个都返回字符串(仅为了示例).服务通过http公开.
Aaand,下一步是什么?:)
我正在使用我的XML-RPC服务使用Apache XML-RPC库但是在响应XML-RPC时有垃圾字符,因此库无法解析结果
这是我的XML-RPC程序:
import java.net.URL;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
public class XMLRpcExample {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
XmlRpcClientConfigImpl cf = new XmlRpcClientConfigImpl();
cf.setServerURL(new URL("/xmlrpc/object"));
cf.setBasicUserName("admin");
cf.setBasicPassword("m_demo");
cf.setConnectionTimeout(60000);
XmlRpcClient client = new XmlRpcClient();
client.setConfig(cf);
Object[] params = new Object[] {"dbname",1,"m_demo","res.partner","partner_sync_openerp","kapil5drd@bxiz","22"};
String s =(String)client.execute("execute", params);
System.out.println(s);
}
}
但我收到此错误的响应,看起来像这样:
[Fatal Error] :16:16: An invalid XML character (Unicode: 0xc) was found in the element content of the document. Exception in thread "main" org.apache.xmlrpc.client.XmlRpcClientException: Failed to …
要使用符合<boolean> XML-RPC的规范,我需要改变我xs:boolean的true|false到1|0.
我用xsl解决了这个问题:选择
<xsl:template match="Foo">
<member>
<name>Baz</name>
<value>
<boolean>
<xsl:choose>
<xsl:when test=".='true'">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</boolean>
</value>
</member>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
但是想知道在用xslt 1.0转换时是否有一种不那么脆弱的方法来控制布尔值的渲染方式.
根据Python文档中的示例,我使用SimpleXMLRPCServer在Python中构建了一个xml-rpc服务器.我是在同一台机器上的Python客户端调用它.服务器功能的主体自己执行得非常快.
但我发现xmlrpc客户端性能极其缓慢,每次调用需要一秒钟.(使用xmlrpclib.)
我在网上找到的加速技术(跳过getfqdn解决方案)没有帮助.
我的连接URI是:
'http://localhost:50080'
Run Code Online (Sandbox Code Playgroud)
我在Windows 7上运行Python 2.7 x64,但对于32位Python 2.7,它的工作原理相同.
xml-rpc ×10
python ×3
c# ×2
xmlrpclib ×2
boolean ×1
casting ×1
client ×1
cocoa ×1
fog ×1
java ×1
objective-c ×1
python-3.4 ×1
sendfile ×1
ubuntu ×1
wcf ×1
xml ×1
xml-rpc.net ×1
xmlrpcclient ×1
xslt ×1