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

发布于 2024-11-30 19:15:38 字数 995 浏览 2 评论 0原文

我的应用程序(.NET 4.0)需要与网络服务集成。如果 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

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

My application(.NET 4.0) needs to integrate with a webservice. If the webservice did have a WSDL it would be easy to generate proxy class with WCF but this is not possible in this case (No WSDL).

To communicate with this server we will have to send a message with settings and then receiver something like this :

<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>

So how do I solve this? Do I have to dig in to XMLDocuments and do it all manual?

Edit1: The URL to the webservice might look like this : 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

There will also be a basic authentication (Username/Password)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

银河中√捞星星 2024-12-07 19:15:38

这似乎是一个非 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 appears to be a non-SOAP endpoint, in which case there is not a standard way to expose service metadata via a WSDL.

Essentially what you'd need to do is create classes to represent the Desc and its child elements:

[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...
}

These classes represent the data you will receive from the service call. Next, create a ServiceContract that represents the service method:

[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);
}

Lastly, create an instance of a client proxy using IChannelFactory and consume the service.

See this blog post on how to create a WCF client to consume a RESTful service using a WCF client.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文