在Web服务中定义全局对象
这是我对那个问题的解决方案。
距离我上次写C#代码已经很久了,这也是我第一次写Web服务...
之前的问题:
我需要在Ubuntu上用Python使用一个DLL。最终的解决方案是使用Web服务来实现这个目的...
我的问题是,这个API是用来处理某种支付的。这个DLL有三个基本功能要在Web服务中使用... 第一个是用来连接服务器,第二个是询问可用的支付方式,第三个是选择一种支付方式并进行支付...
因为我的系统是用Python写的,所以我希望在Python中保留选择支付方式的逻辑,而不是在Web服务中。
我的问题是,当我建立连接时,Web服务必须创建一个连接对象,并使用这个连接对象完成接下来的两个步骤。之后,它可能会处理掉这个连接对象,并为下一个连接和支付创建一个新的连接对象。
所以,我的Python代码大概会这样做...
- 使用Web服务并创建一个连接
- 从Web服务获取可用支付方式的列表(这两个功能可以在Web服务中合并成一个功能)
- 进行一些计算并在Python中选择合适的支付方式...
- 将支付方式信息发送给Web服务...
所有这些步骤都必须使用第一步中的连接对象。正如我之前所说的,我对Web服务和在Python中使用它们的知识不多... 所以我有点困惑,是否可以在步骤2和步骤4中使用同一个连接对象。如果我在连接步骤中将连接对象设置为全局的,那么后续的函数调用是否可以使用这个对象?在面向对象编程中应该是这样的,但我不确定在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并确认我想要的那个...
但就我所见,最好的解决方案是使用一个函数调用并在Web服务中完成所有工作,因为API提供者考虑到移除连接-交易ID锁可能会导致一些安全漏洞...
但另一方面,我又不想在Web服务中处理这个...
还有一个问题... 在连接步骤中,创建连接并使用设置/获取函数,或者返回连接对象并在每个后续步骤中将其传回Web服务,这样是否可行?
1 个回答
如果你在使用网络服务进行沟通,最好是让它保持无状态。这就是说,你每次发送请求的时候,都要把服务需要的所有上下文信息一起发送过去。虽然有一些技术可以让你实现有状态的网络服务,但这样做可能会让事情变得更加复杂,而不是简单。
从你的描述中,我不太明白为什么你需要在第一步创建连接对象,或者为什么你不能在第二步和第四步创建不同的连接对象——这其实是我会采用的做法。