使用SOAP RPC 消息

作者在 2008-06-01 22:22:10 发布以下内容
 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>
响应消息包含两个参数的值,返回参数必须总是第一个列出来。
 
 
 
————————————————————
技术日志 | 阅读 5223 次
文章评论,共0条
游客请输入验证码