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

时间:2011-10-20 04:12:30

标签: c# wcf wsdl gsoap

我找到了通往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)。这可能吗?

提前致谢。

4 个答案:

答案 0 :(得分:1)

如果要将类指定为参数,它将始终将其创建为复杂类型。

如果您不想制作复杂类型,则需要单独传递参数。

所以而不是

void YourOperation (YourObject request)

你需要做(例如)

void YourOperation (int param1, string param2, ...)

如果响应是单个数据类型值(int,string等),它将执行相同的操作而不创建复杂类型。如果您的响应是多个值,那么当您创建一个类作为返回对象时,它会将其作为复杂类型。

答案 1 :(得分:1)

你应该define a contract

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