我的应用程序(.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
还会有基本身份验证(用户名/密码)
答案 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。