我找到了通往WCF + WSDL的方法。它在gSOAP和axis2的第一个例子中运行良好。但我也面临一个问题:
当我查看我的WSDL时,它总是使用复杂类型(请求和响应)进行远程过程调用。
<xsd:element name="AddResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" name="AddResult" type="xsd:double"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
因此,我必须使用两个参数Add
调用proxy.Add(request, response)
方法,然后提取实际返回值double result = reponse.Result
。
我想让它更直接。例如,double result = proxy.Add(1, 2)
。这可能吗?
提前致谢。
答案 0 :(得分:1)
如果要将类指定为参数,它将始终将其创建为复杂类型。
如果您不想制作复杂类型,则需要单独传递参数。
所以而不是
void YourOperation (YourObject request)
你需要做(例如)
void YourOperation (int param1, string param2, ...)
如果响应是单个数据类型值(int,string等),它将执行相同的操作而不创建复杂类型。如果您的响应是多个值,那么当您创建一个类作为返回对象时,它会将其作为复杂类型。
答案 1 :(得分:1)
答案 2 :(得分:1)
创建的WSDL是一个XSD(XML模式定义),它定义了所有的方法和类型 如果您阅读following page,您将看到创建新元素或属性需要复杂类型 要联系您的WCF服务,您可以将其他C#项目中的服务引用添加到您的WCF服务,然后使用常规对象和方法。
答案 3 :(得分:1)
是的,可以以这种方式使用您的服务,这是默认方式。只需使用WCF Service Application模板将新项目添加到您的解决方案中。此模板中嵌入的示例服务包含以下方法:
string GetData(int value)
在不更改任何内容的情况下构建此项目并将为您生成WSDL。然后在其他项目中只需从上下文菜单中选择Add Service Reference - &gt;发现选择找到的内容并单击“确定”。代理类将在您的项目中生成,您可以调用它:
var service = new ServiceReference1.Service1Client();
var reslut = service.GetData(4);