我想用c#实现一个web服务。我有兴趣实现服务器而不是消费者。 Web服务必须由一个独立的软件运行,因为我没有像IIS这样的网络服务器来部署它。我知道我可以带一个wsdl文件,使用gsoap为它生成C代码,我在服务器端实现例程,并构建链接libgsoap的独立程序。没有网络服务器的独立c#webservice
现在我想用c#和.net平台来做同样的事情。
我用来研究它的wsdl文件与gsoap一样,你可以找到它here。
下一步是下载它并运行wsdl -server cal.wsdl
以获得calc.cs
。
在这一点上,我卡住了,因为我无法找到关于如何进行的文档。
如何实现扩展抽象类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文件不包含逻辑,它只告诉客户端它需要与服务器进行通信的方法和类型。 – i3arnon
是的,这就是为什么我在Linux/Unix中编写代码时使用gsoap生成C代码,编译前我还实现了服务器的例程,以便它知道在调用web服务时必须执行的操作。 –
你问如何编写代码和C#并编译它? – i3arnon