使用SOAP RPC 消息

http://hi.bccn.net/space-208216.html

 

soap最初的设计目标之一就是提供一个开放和标准的方式,以便通知诸如XML和HTTP的Interent技术来使用Rpc

要使用 Rpc所需的请求/应答行为的执行需要两个 soap消息:一个用于请求,一个用于响应,可以用一下方式对一个将两个书相加的简单的c#函数的请求进行编码:
public int Add(int x,int y)
{
  return x+y;
}
Add方法接受两个整数作为输入参数,并将结果作为返回参数传回给客户端。输入参数必须在请求消息的正文中打包,这样才能将它们发送到目标应用程序。通过将参数用一种类似于结构的格式进行打包可实现这一点,下面是Add(1,2)的结果的请求消息:
<?xml version="1.0"?>
< soap:Envelope xmlns: soap= http://schemas.xmlsoap.org/ soap/envelope>
  < soap:Body>
     <Add>
       <x>1</x>
       <y>2</y>
      </Add>
  </ soap:Body>
</ soap:Envelope>
其中x和y的顺序是不能颠倒的,将y放在x前面则y无效,等于只传递了一个x。
 
我们已经创建了一个格式正确的请求信息,现在来看看有远程应用程序生成的响应;
<?xml version="1.0"?>
< soap:Envelope xmlns: soap= http://schemas.xmlsoap.org/ soap/envelope>
  < soap:Body>
     <AddResult>
       <result>1</result>
      </AddResult>
  </ soap:Body>
</ soap:Envelope>
远程应用程序返回的请求消息包含Add方法的结果,返回参数再次以结构的格式编码进 Soap消息的正文中。正文中的子元素命名约定是在方法的名称上附加Result。第一个(在本例中是唯一的)参数包含方法调用的返回参数。元素是result。
如果有不止一个参数被返回给客户端又怎么样呢?
public int Add(int x,int y,out int sum)
{
   sum=x+y
   return sum;
}
调用Add(1,2)会生成如下的 SOAP消息:
<?xml version="1.0" enconding="utf-8"?>
< soap:Envelope xmlns: soap= http://schemas.xmlsoap.org/ soap/envelope>
  < soap:Body>
     <Add>
       <x>1</x>
       <y>2</y>
      </Add>
  </ soap:Body>
</ soap:Envelope>
注意第三个参数sum并没有被编码。因为sum是作为输出参数进行声明的,没有理由要将它的初始化值发送给远程应用程序。
<?xml version="1.0"?>
< soap:Envelope xmlns: soap= http://schemas.xmlsoap.org/ soap/envelope>
  < soap:Body>
     <AddResult>
       <result>3</result>
       <sum>3</sum>
      </AddResult>
  </ soap:Body>
</ soap:Envelope>
响应消息包含两个参数的值,返回参数必须总是第一个列出来。

你可能感兴趣的:(xml,C#,SOAP)