【问题标题】:How to invoke a wcf service in a custom server control class?如何在自定义服务器控件类中调用 wcf 服务?
【发布时间】:2011-12-02 19:40:00
【问题描述】:
我正在开发一个自定义服务器控件(例如:文本框),它可以帮助开发人员将控件直接绑定到服务层。
我的要求。
- 文本框将具有类似(Service URL, Method, Parameter 在我的名为 Service Properties 的新类别下)的属性
- 在URL中,我可以传递服务主机路径。
有什么方法可以让我们自动将方法属性上的服务中可用的方法填充为下拉列表(如枚举)。
然后开发者可以根据选择的方法选择合适的参数。
我知道这很困难,但是有什么办法可以克服这个要求。
【问题讨论】:
标签:
wcf
client
servercontrol
【解决方案1】:
如果 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 个方法:
- 获取数据
- 获取电子邮件
- GetPersonCount