我有一个中央应用程序,它接收来自其他应用程序的请求,执行某些操作,然后将数据返回到该应用程序。在最简单的形式中,这些数据将是一个XML文档。
现在,在设计时,这个中心应用程序不知道哪些其他应用程序将发出请求。
每次中央应用程序收到请求时,它都会收到一个URL,告诉中央应用程序其Web服务地址(见下文),因此中央应用程序知道将数据推送到的位置:
http://someapp1.com/UpdateData
http://someapp2.com/UpdateData
现在,我想使用SOAP或某种RESTful实现,最好不要使用WCF。
我的问题是:
答案 0 :(得分:1)
中央应用程序的工作是否是某种长期运行的过程? 否则,为什么Central App不会公开简单地将结果作为响应返回的Web方法,而不是发起新的调用?
someapp1调用Central.GetMyData(param)...中央进程... someapp1从中心接收SOAP响应
这也有助于解耦您的系统,现在已经设置好了许多应用程序知道Central的API和Central知道它应该发送给其他每个应用程序的内容。
答案 1 :(得分:1)
第一点)当然可以更改Web服务代理在运行时所谈论的端点。我相信它看起来像这样......
ws.Endpoint.Address = new System.ServiceModel.EndpointAddress( newurl )
在您的情况下,显然您的“中央应用程序”将调用代理,因为它将数据发送回您的“请求者/接收者”。
当你请求者/接收者提出请求时,它将使用代理来调用中央应用程序,但我想在这种情况下,它不需要是动态的(只有一个“中央应用程序”对吗?)
要点2)不确定最聪明的做法是什么。当然,默认情况下,您从WCF Web服务发送/接收的消息始终是XML。如果希望服务协定保持不变,则需要一个包装器对象来包含数据。我想你可以尝试创建一个具有“有效负载”成员的对象来保存你的数据。
希望这有帮助
迈克尔