【发布时间】:2014-01-07 09:36:11
【问题描述】:
我想使用 c# 实现一个 Web 服务。我对实现服务器而不是消费者感兴趣。 Web服务必须由独立软件运行,因为我没有IIS之类的Web服务器来部署它。
在 Linux/Unix 中,我知道我可以获取一个 wsdl 文件,我使用 gsoap 为其生成 C 代码,我在服务器端实现例程并构建链接 libgsoap 的独立程序。
现在我想用 c# 和 .net 平台做同样的事情。
我用来研究的wsdl文件和gsoap一样,你可以找到here。
下一步是下载它并运行wsdl -server cal.wsdl以获得calc.cs。
此时我被卡住了,因为我无法找到有关如何 继续。
如何实现扩展我通过运行 wsdl 获得的抽象类 calc 的程序,该 wsdl 启动一个小型 Web 服务器来执行所需的功能?你能指点我一些好的文档吗?
已添加
当我运行 wsdl -server cal.wsdl 时,我得到了这段代码
/// <remarks/>
/// <remarks>
///gSOAP 2.7.9k generated service definition
///</remarks>
[System.Web.Services.WebServiceAttribute(Namespace="http://websrv.cs.fsu.edu/~engelen/calc.wsdl")]
[System.Web.Services.WebServiceBinding(Name="calc", Namespace="http://websrv.cs.fsu.edu/~engelen/calc.wsdl")]
public abstract partial class calc : System.Web.Services.WebService {
/// <remarks>
///Service definition of function ns__add
///</remarks>
[System.Web.Services.WebMethodAttribute()]
[System.Web.Services.Protocols.SoapRpcMethodAttribute("", RequestNamespace="urn:calc", ResponseNamespace="urn:calc")]
[return: System.Xml.Serialization.SoapElement("result")]
public abstract double add(double a, double b);
/// <remarks>
///Service definition of function ns__sub
///</remarks>
[System.Web.Services.WebMethodAttribute()]
[System.Web.Services.Protocols.SoapRpcMethodAttribute("", RequestNamespace="urn:calc", ResponseNamespace="urn:calc")]
[return: System.Xml.Serialization.SoapElement("result")]
public abstract double sub(double a, double b);
/// <remarks>
///Service definition of function ns__mul
///</remarks>
[System.Web.Services.WebMethodAttribute()]
[System.Web.Services.Protocols.SoapRpcMethodAttribute("", RequestNamespace="urn:calc", ResponseNamespace="urn:calc")]
[return: System.Xml.Serialization.SoapElement("result")]
public abstract double mul(double a, double b);
/// <remarks>
///Service definition of function ns__div
///</remarks>
[System.Web.Services.WebMethodAttribute()]
[System.Web.Services.Protocols.SoapRpcMethodAttribute("", RequestNamespace="urn:calc", ResponseNamespace="urn:calc")]
[return: System.Xml.Serialization.SoapElement("result")]
public abstract double div(double a, double b);
/// <remarks>
///Service definition of function ns__pow
///</remarks>
[System.Web.Services.WebMethodAttribute()]
[System.Web.Services.Protocols.SoapRpcMethodAttribute("", RequestNamespace="urn:calc", ResponseNamespace="urn:calc")]
[return: System.Xml.Serialization.SoapElement("result")]
public abstract double pow(double a, double b);
}
这是一个抽象类,因为服务器端的所有方法都没有实现。因此,我希望,与我通常使用 gsoap 所做的类似,我必须扩展这个类并覆盖抽象方法,这很容易。
问题是在那之后我不知道如何编写一个程序来获取继承的类并启动一个 Web 服务器并在网络上公开该 Web 服务。
【问题讨论】:
-
听起来您正试图从 wsdl 生成 Web 服务实现。这不可能。 wsdl 文件不包含逻辑,它只告诉客户端它需要与服务器通信的方法和类型。
-
是的,这就是为什么我写在 Linux/Unix 中我用 gsoap 生成 C 代码,在编译之前我还为服务器实现了例程,以便它知道当webservice 被调用。
-
你问如何编写代码和 C# 并编译它?
-
不,我只是想了解在所有函数中编写逻辑后如何实例化 Web 服务。检查我添加的代码。
-
您正在使用 ASMX 技术。 ASMX 是一项遗留技术,不应用于新开发。 WCF 或 ASP.NET Web API 应该用于 Web 服务客户端和服务器的所有新开发。一个提示:Microsoft 已停用 MSDN 上的 ASMX Forum。
标签: c# web-services soap wsdl asmx