如何在自定义服务器控件类中调用wcf服务?

时间:2011-12-02 10:21:30

标签: wcf client servercontrol

我正在开发一个自定义服务器控件(例如:TextBox),它可以帮助开发人员将控件直接绑定到服务层。

我的要求。

  1. 文本框的属性类似于(服务网址,方法,参数,在我的新类别下称为服务属性
  2. 在URL中,我可以传递服务主机路径。
  3. 有没有什么方法可以自动将方法属性服务中可用的方法填充为下拉列表(Like Enum)。

    然后开发人员可以根据所选方法选择正确的参数。

    我知道这很难,但有没有办法克服这个要求。

1 个答案:

答案 0 :(得分:0)

如果Web服务是SOAP服务,那么您可以将wsdl放入XDocument对象或XmlDocument中,然后读取wsdl:portType元素中的wsdl:operation元素以获取所有可用的操作。

注意:仅当服务提供商公开wsdl时才可以这样做。

示例wsdl,操作很少,如下所示:

<wsdl:portType name="ISampleService">
    <wsdl:operation name="GetData">
      <wsdl:input wsaw:Action="http://tempuri.org/ISampleService/GetData" message="tns:ISampleService_GetData_InputMessage" />
      <wsdl:output wsaw:Action="http://tempuri.org/ISampleService/GetDataResponse" message="tns:ISampleService_GetData_OutputMessage" />
    </wsdl:operation>
    <wsdl:operation name="GetEmail">
      <wsdl:input wsaw:Action="http://tempuri.org/ISampleService/GetEmail" message="tns:ISampleService_GetEmail_InputMessage" />
      <wsdl:output wsaw:Action="http://tempuri.org/ISampleService/GetEmailResponse" message="tns:ISampleService_GetEmail_OutputMessage" />
    </wsdl:operation>
    <wsdl:operation name="GetPersonCount">
      <wsdl:input wsaw:Action="http://tempuri.org/ISampleService/GetPersonCount" message="tns:ISampleService_GetPersonCount_InputMessage" />
      <wsdl:output wsaw:Action="http://tempuri.org/ISampleService/GetPersonCountResponse" message="tns:ISampleService_GetPersonCount_OutputMessage" />
    </wsdl:operation>
  </wsdl:portType>

服务的上述部分公开了3种方法:

  1. 的GetData
  2. GetEmail
  3. GetPersonCount