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)。这可能吗?

WCF WSDL只提供复杂的类型/方法

如果你指定一个类作为参数,它将总是创建一个复杂类型

如果不希望生成复杂类型,则需要单独传递参数。

所以不用

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);