在Web服务中定义全局对象

时间:2011-10-25 16:13:58

标签: c# python web-services

这是我对that question

的解决方案

自从我上次编写c#以来已经很长时间了,这是我第一次编写Web服务...

上一个问题:

  

我需要在带有Python的Ubuntu上使用DLL。最终的解决方案是使用Web服务进行提议...

我的问题是,API用于某种付款方式。在webservice中使用DLL有三个基本功能...第一个用于连接服务器,第二个用于询问可用付款,第三个用于选择一个并付款...

由于我的系统使用的是Python,我希望保留在python上选择支付方式的逻辑,而不是在Web服务上。

我的问题是,当我建立连接时,webservice必须创建一个连接对象,并使用该连接执行以下两个步骤。它可以处置该连接对象并为下一次连接和支付创建一个新对象。

所以,我的Python代码会做类似的事情......

  1. 使用网络服务并创建连接
  2. 从Web服务获取可用付款列表(这两个函数可用作Web服务中的单个函数)
  3. 进行一些计算,并在 python ...
  4. 中选择正确的付款方式
  5. 将付款方式信息发送到网络服务......
  6. 所有这些步骤必须使用第一步中的连接对象完成。 正如我之前所说,我对Web服务并没有太多了解并在python上使用它们...所以我很困惑我是否可以在步骤2和4中使用相同的连接对象。如果我将连接对象创建为全局在我的Web服务的连接步骤,然后我的以下函数调用使用该对象?在OOP中它必须是这样,但我不能确定它在Web服务中是否相同?

    一些代码段:

    namespace paymentType{
      public class x : System.Web.Services.WebService{
    
      ConnectionObj conn;
      ConnResult result;
    
      [WebMethod]
      public void ConnectToServer(String deviceId){
      conn = new ConnectionObj();
      result = baglanti.Connect(deviceId);
      }
    
      [WebMethod]
      public List<int> GetCompanyList(){
      List<int> kurumlar = new List<int>();
      if (sonuc.CRCStatus){
      if (baglanti.CompanyList != null) { blah blah blah...}
    

    由于conn是全局的,我可以在函数调用ConnectToServer中设置它,并将baglanti对象用于其他函数...

    更新:让我试着让它更清楚......

    当我连接到远程服务器(通过DLL中的函数)时,远程服务器接受我的连接并为该连接提供一个有点唯一的ID。然后我要求为客户付款。服务器发送所有可用的事务ID,该事务ID属于该事务。在最后一步中,我使用了我想要付款的交易ID。问题是,每个事务ID都可以在创建它的连接中使用。所以,我必须请求交易ID并在同一连接中确认我想要的那个......

    但据我所知,最佳解决方案是使用单个函数调用并完成Web服务上的所有工作,因为API提供程序认为删除connection-transactionId锁可能会导致一些安全漏洞......

    但另一方面,我不想在网络服务上处理它......

    还有一个问题......在连接步骤中,创建连接并使用set / get函数或返回连接对象并将其传递回Web服务以进行后续步骤可能会有效吗?

1 个答案:

答案 0 :(得分:1)

如果您正在使用Web服务进行通信,则最好是无状态 - 也就是说,您应始终在请求中发送服务实现所需的任何上下文信息。虽然存在可以实现有状态 Web服务的技术,但它们可能会使事情变得更复杂,而不是更少。

我不清楚你的描述为什么你需要在步骤1中创建连接对象,或者为什么你不能只为步骤2和4创建一个不同的连接对象 - 这就是我实现的方式此