[英]Implementing a SOAP web service
我具有SOAP服务的WSDL定义,并且已经使用SvcUtil从中成功生成* .cs文件。
实现客户端非常简单-我只需要从生成的* .cs中调用必要的函数即可。
实施服务器似乎更加复杂。 据我了解,我需要从生成的* .cs实现一个接口,然后使用一些魔术方法将其转换为Web服务器。
但是我不需要新的Web服务器,我已经有一个用C#编写的Web服务器,该服务器已经具有许多与我需要实现的SOAP服务无关的功能。 我不想再创建一个Web服务器,但我希望我的SOAP服务只是一个我现有的应用程序(服务器)的一部分,这是我的服务器可以回答如请求http://example.com/request1
, http://example.com/request2
等。我希望此SOAP服务只是http://example.com/request3
。
由于HTTP已经由我的服务器处理过,因此我不需要.NET来为我处理它,基本上我的服务器可以接受客户端连接并根据URL调用必要的处理程序。 我有一个用于SOAP请求的处理程序,看起来像这样:
MyResponse HandleSOAPRequest(MyRequest request)
{
// 1. parse soap message from request.body
// 2. process it
// 3. generate response, serialize it in SOAP format and return it
}
问题是-我可以依靠WSDL定义和.NET库吗?
目前,我正在使用XDocument解析SOAP请求,并从中手动提取字段并使用简单的字符串连接进行序列化。 使用.NET内置函数来序列化或解析XML是行不通的。 也就是说,如果我尝试序列化生成的* .cs文件中定义的类的对象的响应,则生成的XML与协议期望的不同,类似地,如果我尝试将请求解析为定义的类的对象在生成的* .cs文件中,我得到了错误,因为XML解析器期望使用不同的格式。 这适用于SoapFormatter和XmlSerializer。
由于.NET可以实现客户端,这意味着解析和序列化SOAP消息所需的一切都已实现,因此我只需要找出一种使用此功能的方法即可。
ServiceModel的文档不是很有帮助。
最简单的方法是通过ServiceHost
启动服务:
ServiceHost host = new ServiceHost(typeof(YourService));
host.Open();
(我假设这里的配置来自app.config
,不会像下面的链接示例中那样在代码中进行设置。)
这样做的唯一缺点是应用程序必须以管理员权限运行,否则必须进行奇怪的配置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.