Vb.net Soap客户端确认

Vb.net Soap客户端确认,vb.net,web-services,soap,asmx,webservice-client,Vb.net,Web Services,Soap,Asmx,Webservice Client,我使用asmx文件创建了一个小型web服务方法。这是它的简化版本 <WebMethod()> _ Public function DeleteFile(Byval fileID As String) as boolean DeleteFileByID(fileID) return true End Sub _ 作为布尔值的公共函数DeleteFile(Byval fileID作为字符串) DeleteFileByID(fileID) 返回真值 端接头 它工

我使用asmx文件创建了一个小型web服务方法。这是它的简化版本

    <WebMethod()> _
Public function DeleteFile(Byval fileID As String) as boolean
    DeleteFileByID(fileID)
    return true
End Sub
_
作为布尔值的公共函数DeleteFile(Byval fileID作为字符串)
DeleteFileByID(fileID)
返回真值
端接头
它工作得很好,但我想确保发送回客户端的数据不会在过程中丢失

我知道这可以通过设置第二个web服务方法来实现,客户端将调用该方法来确认他收到了一些数据。但是,我想知道这是否可以通过单一web服务方法来实现

以下是我可能正在寻找的一个示例:

        <WebMethod()> _
Public function DeleteFile(Byval fileID As String) as boolean
    return true

    clientAcknowledgement = 'This is what I'm loking for... How to make sure the client received the confiormation before deleting the file
    if clientAcknowledgement then
        DeleteFileByID(fileID)
    end if

End Sub
_
作为布尔值的公共函数DeleteFile(Byval fileID作为字符串)
返回真值
clientAcknowledgement='这就是我想要的。。。如何确保客户端在删除文件之前收到确认
如果客户确认,则
DeleteFileByID(fileID)
如果结束
端接头

我将通过向调用方可以设置的web方法调用添加一个参数来解决这个问题

<WebMethod()> _
Public Function DeleteFile(ByVal fileID As String, clientAcknowledgement As Boolean) As Boolean
    If clientAcknowledgement Then
        DeleteFileByID(fileID)
    End If
End Function
_
公共函数DeleteFile(ByVal fileID作为字符串,clientAcknowledgement作为布尔值)作为布尔值
如果客户确认,则
DeleteFileByID(fileID)
如果结束
端函数
如果调用此方法的开发人员是懒惰的,并且在没有提示最终用户的情况下一直将其设置为true,那么他们有责任回答用户的问题

在调用一种方法和另一种方法的场景中,您可能会变得非常复杂,但最终,使用web服务的开发人员可以绕过您所做的任何事情,除非您自己实现代码,否则您无法真正保证最终用户已经被问到

更新

在澄清了想要知道调用方在实际删除文件之前收到了响应之后,我有了一些额外的想法

据我所知,在执行实际删除之前,没有一种简单的方法可以确保web服务响应已成功交付给客户端

但是,有两种选择:

选项A:添加DeleteRequested方法,该方法向调用者发送令牌,然后调用者必须返回DeleteFile方法。只有当令牌有效时,您才会执行删除。这里仍然存在时间问题,但它比当前的实现稍好一些


选项B:实现通过ASHX页面公开的。由于在此场景中您负责发送响应,因此您将知道它是否成功完成传输(即客户端断开连接),因此您可以等待执行删除,直到响应完成。这确实改变了客户机调用和响应您的服务的方式,但确实为您提供了所需的验证。

试图稍微了解一下字里行间的意思,我发现海报的问题可能是,如果在一系列操作(使用web服务调用调用)之间出现错误,数据库或一组文件(或两者)可能处于不一致的状态

在这种情况下,我建议使用事务

MSDN文章是关于事务的一个很好的起点


以海报为例,删除文件可能会出现各种各样的问题,而不仅仅是缺少SOAP确认。事务的概念是,如果出现任何错误,事务中所做的所有更改都将被撤销。HTH

您可以选择使用WCF吗?如果是这样的话,你可以看看答案。如果你不想删除一个文件,为什么要调用一个名为
DeleteFile
的方法,并将你不想删除的文件的Id和一个错误的布尔值传递给该方法,该值基本上是“开玩笑,我真的不想删除它”。我认为问题更多的是确认客户收到SOAP响应。Matt是对的。这里真正的问题是关于客户收到SOAP响应的问题。@Matt:不清楚OP是在干什么,也不完全清楚。我以为他们在追求责任。通过添加一个标志,您可以在事务日志中记录调用者验证了他们首先与最终用户进行了检查,这样,如果出现任何问题,您可以指向该日志作为调用者与用户验证的证据。这非常类似于选中许可协议中您同意条款的复选框。你可能从来没有读过它们,但你还是勾选了这个框,它包含了公司的许可协议。@the_Black_Smurf:对不起,我没有从这个问题上理解这一点。请查看答案的更新。