这是我对that question
的解决方案自从我上次编写c#以来已经很长时间了,这是我第一次编写Web服务...
上一个问题:
我需要在带有Python的Ubuntu上使用DLL。最终的解决方案是使用Web服务进行提议...
我的问题是,API用于某种付款方式。在webservice中使用DLL有三个基本功能...第一个用于连接服务器,第二个用于询问可用付款,第三个用于选择一个并付款...
由于我的系统使用的是Python,我希望保留在python上选择支付方式的逻辑,而不是在Web服务上。
我的问题是,当我建立连接时,webservice必须创建一个连接对象,并使用该连接执行以下两个步骤。它可以处置该连接对象并为下一次连接和支付创建一个新对象。
所以,我的Python代码会做类似的事情......
所有这些步骤必须使用第一步中的连接对象完成。 正如我之前所说,我对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服务以进行后续步骤可能会有效吗?
答案 0 :(得分:1)
如果您正在使用Web服务进行通信,则最好是无状态 - 也就是说,您应始终在请求中发送服务实现所需的任何上下文信息。虽然存在可以实现有状态 Web服务的技术,但它们可能会使事情变得更复杂,而不是更少。
我不清楚你的描述为什么你需要在步骤1中创建连接对象,或者为什么你不能只为步骤2和4创建一个不同的连接对象 - 这就是我实现的方式此