Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以使用基本HTTP请求使用XML RPC服务?_C#_Xml_Web Services - Fatal编程技术网

C# 是否可以使用基本HTTP请求使用XML RPC服务?

C# 是否可以使用基本HTTP请求使用XML RPC服务?,c#,xml,web-services,C#,Xml,Web Services,我的任务是使用XMLRPCAPI,我对它非常不熟悉。我浏览了几页关于它的描述,我也看到了一些图书馆 然而,这让我感觉到,归根结底,它只是发布了一个HTTP请求,与REST类似,只是在主体中使用XML而不是JSON 我设想构建一个类似于以下内容的HTTP请求: POST /path/service.cfm HTTP/1.0 From: example@example.com User-Agent: whatever/1.0 Content-Type: application/xml Content

我的任务是使用XMLRPCAPI,我对它非常不熟悉。我浏览了几页关于它的描述,我也看到了一些图书馆

然而,这让我感觉到,归根结底,它只是发布了一个HTTP请求,与REST类似,只是在主体中使用XML而不是JSON

我设想构建一个类似于以下内容的HTTP请求:

POST /path/service.cfm HTTP/1.0
From: example@example.com
User-Agent: whatever/1.0
Content-Type: application/xml
Content-Length: 155

<?xml version="1.0"?>
<methodCall>
  <methodName>examples.getStateName</methodName>
  <params>
    <param>
        <value><i4>40</i4></value>
    </param>
  </params>
</methodCall>
POST/path/service.cfm HTTP/1.0
发件人:example@example.com
用户代理:随便什么/1.0
内容类型:application/xml
内容长度:155
示例.getStateName
40
我走对了吗?周围丰富的图书馆给我的感觉可能比我想象的要复杂。理想情况下,我希望自己在.NET中编写一个快速客户端。

staticvoidmain(string[]args)
    static void Main(string[] args)
    {
          HttpWebRequest request = BuildWebRequest();

          var response = request.GetResponse() as HttpWebResponse;
          var responseContent = new StreamReader(response.GetResponseStream()).ReadToEnd();

    }

    private static HttpWebRequest BuildWebRequest()
    {
        var request = WebRequest.Create(Url) as HttpWebRequest;

        request.Method = "POST";
        request.ContentType = "application/xml";
        request.Timeout = 40000;
        request.ServicePoint.Expect100Continue = true;

        string body = @"<?xml version="1.0"?>
<methodCall>
  <methodName>examples.getStateName</methodName>
  <params>
    <param>
        <value><i4>40</i4></value>
    </param>
  </params>
</methodCall>";

        byte[] bytes = Encoding.Default.GetBytes(body);

        using (var requestStream = request.GetRequestStream())
        {
            requestStream.Write(bytes, 0, bytes.Length);
        }

        return request;
    }
{ HttpWebRequest request=BuildWebRequest(); var response=request.GetResponse()作为HttpWebResponse; var responseContent=newstreamreader(response.GetResponseStream()).ReadToEnd(); } 私有静态HttpWebRequest BuildWebRequest() { var request=WebRequest.Create(Url)为HttpWebRequest; request.Method=“POST”; request.ContentType=“应用程序/xml”; 请求超时=40000; request.ServicePoint.Expect100Continue=true; 字符串体=@“ 示例.getStateName 40 "; byte[]bytes=Encoding.Default.GetBytes(body); 使用(var requestStream=request.GetRequestStream()) { requestStream.Write(字节、0、字节、长度); } 返回请求; }

是的,这不是一个问题,这里是一个如何做到这一点的例子。在字符串体中,您必须只编写xml,并且应该输入正确的内容类型。如果服务提供商有特定标题等要求,您应该添加它们。

啊,是的,这正是我想要的。那么您以前在XML RPC服务上使用过这个吗?@drminnaar如果您愿意,您可以接受我的回答。