WCF WSDL只提供复杂的类型/方法
本文关键字:类型 方法 复杂 WSDL WCF | 更新日期: 2023-09-27 18:11:52
我已经找到了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>
因此我必须用两个参数proxy.Add(request, response)
调用Add
方法,然后提取实际返回值double result = reponse.Result
。
我想让它更直接。例如,double result = proxy.Add(1, 2)
。这可能吗?
如果你指定一个类作为参数,它将总是创建一个复杂类型
如果不希望生成复杂类型,则需要单独传递参数。
所以不用
void YourOperation (YourObject request)
你需要做(例如)
void YourOperation (int param1, string param2, ...)
如果响应是单一数据类型值(int,string等),它将做同样的事情,而不会创建复杂类型。如果您的响应不止一个值,那么当您创建一个类作为返回对象时,它将把它作为一个复杂类型。
你应该定义一个合同
创建的WSDL是一个XSD (XML模式定义),它定义了所有的方法和类型。
如果您阅读下面的页面,您将看到创建新元素或属性需要complextype。
要联系WCF服务,你可以将其他c#项目中的service引用添加到WCF服务中,然后使用普通对象和方法。
可以这样使用您的服务,这是默认的方式。只需使用WCF服务应用程序模板将新项目添加到解决方案中。在此模板样例服务中嵌入的方法包括:
string GetData(int value)
在不更改任何内容的情况下构建此项目,WSDL将为您生成。然后在其他项目中,只需从上下文菜单中选择添加服务参考->发现选择找到的内容并单击确定。代理类将在您的项目中生成,您可以调用它:
var service = new ServiceReference1.Service1Client();
var reslut = service.GetData(4);