如何在没有使用C#的WSDL的情况下处理Web服务?

时间:2011-08-23 18:05:37

标签: .net xml wcf web-services c#-4.0

我的应用程序(.NET 4.0)需要与Web服务集成。如果webservice确实有一个WSDL,那么使用WCF生成代理类很容易,但在这种情况下这是不可能的(无WSDL)。

要与此服务器通信,我们必须发送带有设置的消息,然后发送接收器:

<Desc>
<Make cfe_code="98" cfe_value="Volkswagen" label="Märke" value="Volkswagen"/>
<ModelName cfe_code="99" cfe_value="Touareg" label="Modell" value="Touareg"/>
<BodyType cfe_code="212" cfe_value="22" label="Kaross" value="SUV"/>
<ModelYear cfe_code="8" cfe_value="2005" label="Årsmodell" value="2005"/>
...
</Desc>

那么我该如何解决这个问题呢?我是否必须深入研究XMLDocuments并手动完成所有操作?

Edit1:网络服务的网址可能如下所示:http://MyServer.com/ag/get?UID=9999999999.eu_vddsall_xml&VINREG=STU123&LANG=en

UID is static
VINREG is the registration ID of the object that we need information about
LANG is the language setting

还会有基本身份验证(用户名/密码)

1 个答案:

答案 0 :(得分:3)

这似乎是一个非SOAP端点,在这种情况下,没有通过WSDL公开服务元数据的标准方法。

基本上你需要做的是创建表示Desc及其子元素的类:

[XmlRoot("Desc")]
public class Description
{

    [XmlElement("Make")]
    public Make make { get; set; }

    [XmlElement("ModelName")]
    public ModelName modelName { get; set; }

    // etc...
}

public class Make
{

    [XmlAttribute("cfe_code")]
    public int cfeCode { get; set; }

    // etc...
}

这些类表示您将从服务调用中收到的数据。接下来,创建一个代表服务方法的ServiceContract

[ServiceContract]
[XmlSerializerFormat]
public interface IService
{
    [OperationContract]
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare,
      ResponseFormat = WebMessageFormat.Xml,
      UriTemplate = "get?UID=9999.eu_vddsall_xml&VINREG={vinreg}&LANG=en")]
    Description MyMethod(string vinreg);
}

最后,使用IChannelFactory创建客户端代理的实例并使用该服务。

有关如何使用WCF客户端创建WCF客户端以使用RESTful服务,请参阅this blog post