【问题标题】:How to handle webservice without WSDL with C#?如何使用 C# 处理没有 WSDL 的 web 服务?
【发布时间】:2011-08-23 18:05:36
【问题描述】:

我的应用程序 (.NET 4.0) 需要与 Web 服务集成。如果 web 服务确实有 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: Web 服务的 URL 可能如下所示: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

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

【问题讨论】:

  • 我想是的。我们需要更多信息。为什么没有 WSDL?该服务公开了哪些方法?
  • @Inuyasha > 我不知道为什么没有 WSDL。只有一种方法,看Edit1。
  • @SnowJim - 您是否尝试过点击服务地址并将 ?wsdl 添加到末尾?

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


【解决方案1】:

这似乎是一个非 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 创建一个客户端代理实例并使用该服务。

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

【讨论】:

  • 仅供参考,[Serializable] 被 XML 序列化程序忽略。
  • @John Saunders - 我不确定是否需要 Serializable 属性,所以我谨慎行事。感谢您的澄清。我已经编辑了我的帖子以删除不必要的属性。
  • @RoccoC5 > 这看起来不错!谢谢!我会尽快解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2015-03-06
  • 2015-07-01
  • 2021-10-30
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
相关资源
最近更新 更多