实现SOAP Web服务

时间:2014-12-26 14:43:28

标签: c# .net soap

我有一个SOAP服务的WSDL定义,我已经使用SvcUtil从它成功生成了* .cs文件。

实现客户端非常简单 - 我只需要从生成的* .cs中调用必要的函数即可。

实现服务器似乎更复杂。据我所知,我需要从生成的* .cs实现一个接口,然后使用一些魔法将其转换为Web服务器。

但我不需要新的Web服务器,我已经有一个用C#编写的Web服务器,它已经有许多与我需要实现的SOAP服务无关的功能。我不想创建另一个Web服务器,但我希望我的SOAP服务只是我现有应用程序(服务器)的一部分,这是我的服务器可以回答的问题。请求http://example.com/request1http://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的documentation非常有帮助。

1 个答案:

答案 0 :(得分:0)

最简单的方法是通过ServiceHost

启动服务
ServiceHost host = new ServiceHost(typeof(YourService));
host.Open();

(我假设这里的配置来自app.config,并且不会像下面的链接示例那样在代码中设置。)

How to: Expose a Contract to SOAP and Web Clients

唯一的缺点是应用程序必须以管理员权限运行,否则需要一个奇怪的配置。