【问题标题】:WCF WSDL only offers complex types / methodsWCF WSDL 只提供复杂的类型/方法
【发布时间】:2011-10-20 04:12:30
【问题描述】:

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

提前致谢。

【问题讨论】:

    标签: c# wcf wsdl gsoap


    【解决方案1】:

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

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

    所以不是

    void YourOperation (YourObject request)
    

    你需要做(例如)

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

    如果响应是单个数据类型值(int、string 等),它会做同样的事情而不创建复杂类型。如果您的响应是多个值,那么当您创建一个类作为返回对象时,它将把它作为一个复杂类型。

    【讨论】:

    • 但我只是声明了一个int Add(int a, int b) 方法并在其上运行gSOAP。所以我没有使用复杂类型!
    【解决方案2】:

    你应该define a contract

    【讨论】:

      【解决方案3】:

      创建的 WSDL 是一个 XSD(一个 XML 模式定义),它在那里定义了所有的方法和类型。
      如果您阅读following page,您会发现创建新元素或属性需要复杂类型。
      要联系您的 WCF 服务,您可以将其他 C# 项目中的服务引用添加到您的 WCF 服务,然后使用普通对象和方法。

      【讨论】:

        【解决方案4】:

        是的,可以以这种方式使用您的服务,这是默认方式。只需使用 WCF 服务应用程序模板将新项目添加到您的解决方案。该模板示例服务中的嵌入包含这样的方法:

        string GetData(int value)
        

        在不做任何更改的情况下构建这个项目,然后将为您生成 WSDL。然后在其他项目中,只需从上下文菜单中选择 Add Service Reference -> Discover 选择找到的内容,然后单击 OK。代理类将在您的项目中生成,您可以调用它:

        var service = new ServiceReference1.Service1Client();
        var reslut = service.GetData(4);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-06-26
          • 1970-01-01
          • 1970-01-01
          • 2010-12-06
          • 1970-01-01
          • 1970-01-01
          • 2010-09-17
          • 2014-06-27
          相关资源
          最近更新 更多