我正在研究一种旨在通过SOAP over HTTP实现的协议。 WSDL文件由第三方提供。
我使用wsdl.exe生成代理类并在VS中创建了一个Web服务项目。
wsdl.exe yourFile.wsdl /l:CS
我从一个展开的wsdl获得了一个cs。
段:
[System.Web.Services.Protocols.SoapHeaderAttribute("chargeBoxIdentity")]
[System.Web.Services.WebMethodAttribute()]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("/ClearCache", RequestElementName="clearCacheRequest", RequestNamespace="urn://Ocpp/Cp/2012/02/", ResponseElementName="clearCacheResponse", ResponseNamespace="urn://Ocpp/Cp/2012/02/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
[return: System.Xml.Serialization.XmlElementAttribute("status")]
public abstract ClearCacheStatus ClearCache();
连接到设备的中央系统(服务器)。设备初始化后,会向中央系统发送授权。 并且服务器响应授权消息。 我已经完成了Server Side,它提供了所有客户端向Server发送请求的功能。服务器响应消息。效果很好。
实现的另一部分是需要向设备发送消息的中央系统(例如,清除设备缓存,请参阅上面的代码片段)。我也将这些方法添加到Web服务中。
我的问题是......
如何通过Web服务的代理向设备发送消息?
从Web Service向设备发送请求调用方法是不可能的?有什么建议吗?
或者我需要创建一个实现ClearCache方法的项目并将其格式化为要触发的SOAP消息?
谢谢!
答案 0 :(得分:0)
我不认为允许中央系统直接与客户端通信是个好主意(如果设备数量很高并且服务器尝试发送多条消息,将在网络中产生巨大噪音).. < / p>
更好的方法是允许服务器打算发送到客户端的所有消息在服务器计算机中本地缓存。客户端应定期使用其他Web服务与服务器通信,并获取要发送给客户端的缓存信息。
您可以设计一种方法,将客户端的guid作为Web服务调用中的参数发送。
在服务器上维护数据库并跟踪需要发送给客户端的消息。
在客户端中使用计时器对象。在计时器过去时定义一个通过发送其guid与服务器通信的方法。在服务器端使用此guid作为主键来识别需要发送到客户端的wat消息,然后在从消息返回时回复该消息。
然后,客户端使用此返回值来决定如何响应。