带有xml请求和响应的C#api

带有xml请求和响应的C#api,c#,xml,winforms,api,soap,C#,Xml,Winforms,Api,Soap,我有一个API,我需要以XML格式发送请求以获得响应(也是XML格式)。我认为这就是所谓的SOAP API,但我不确定,所以我在这里插入了我发送的内容 请求应如下所示: <request> <login>name</login> <password>password</password> <hotId>1</hotId> </request> "; 那么,在C#中,最好的方

我有一个API,我需要以XML格式发送请求以获得响应(也是XML格式)。我认为这就是所谓的SOAP API,但我不确定,所以我在这里插入了我发送的内容

请求应如下所示:

<request>
    <login>name</login>
    <password>password</password>
    <hotId>1</hotId>
</request>
"; 那么,在C#中,最好的方法是什么

我试过这样的方法,但不起作用,我想一定有更好的方法

[System.Web.Services.Protocols.SoapRpcMethodAttribute("http://api.xxx.com/v1/hotel/get", RequestNamespace="http://api.xxx.com/v1/hotel/", ResponseNamespace="http://api.xxx.com/v1/hotel/", Use=System.Web.Services.Description.SoapBindingUse.Literal)]
[return: System.Xml.Serialization.XmlElementAttribute("hotel")]
public hotelType get(int hotId) {
    object[] results = this.Invoke("get", new object[] {
                hotId});
    return ((hotelType)(results[0]));
}
建造商:

string request = xmlrequest;
SOAPclient client = new SOAPclient();
string response = client.methodName(request);

您描述的通信模式是SOAP服务

在.NET中,使用其中一个服务的最简单方法是使用WSDL(Web服务定义语言)文件。该文件包含有关公开的Web服务的元数据:它位于何处、可用的方法、方法生成和接受的数据类型、应使用的传输层和/或安全层等

您应该能够从web服务提供商处获取WSDL;您可以下载它或从其托管位置引用它。一旦您拥有此文件或知道其位置,您所要做的就是进入VS,右键单击包含需要使用web服务的代码的项目,然后单击“添加服务引用…”。。。“。然后键入WSDL的位置(这是为了查找托管的WSDL文件,而不是您托管的WSDL文件,但它将以两种方式工作),您应该会看到有关服务的信息。单击OK,VS将自动生成一个代理类和所需的任何自定义数据类型,调用这些类时将形成并传输正确的SOAP消息,并等待响应


然后,您只需新建一个服务实例,并像处理任何类一样使用它。

您描述的通信模式是SOAP服务

在.NET中,使用其中一个服务的最简单方法是使用WSDL(Web服务定义语言)文件。此文件包含与公开的web服务相关的元数据:它位于何处、可用的方法、方法生成和接受的数据类型、应使用的传输层和/或安全层等

您应该能够从web服务提供商处获取WSDL;您可以从其托管位置下载或引用它。一旦你有了这个文件或者知道了它的位置,你所要做的就是进入VS,右键单击包含需要使用web服务的代码的项目,然后单击“添加服务引用…”。然后键入WSDL的位置(这是为了查找托管的WSDL文件,而不是您托管的文件,但它可以双向工作),您应该会看到有关服务的信息。单击OK,VS将自动生成一个代理类和所需的任何自定义数据类型,调用这些类时将形成并传输正确的SOAP消息,并等待响应


然后,您只需新建一个服务实例,并像处理任何类一样使用它。

我实际上已经用SOAP做了类似的事情,这就是我如何使它工作的。首先,右键单击项目并选择“添加服务引用”。输入SOAP Web服务的URL,Visual Studio将自动生成所需的所有方法。然后,通过使用namespace.servicereferencename添加
,将其包含在当前类中。查看服务引用的对象浏览器并查找客户端名称。然后,您可以执行以下操作:


就这么简单。

我实际上用SOAP做过类似的事情,这就是我如何让它工作的。首先,右键单击项目并选择“添加服务引用”。输入SOAP Web服务的URL,Visual Studio将自动生成所需的所有方法。然后,通过使用namespace.servicereferencename添加
,将其包含在当前类中。查看服务引用的对象浏览器并查找客户端名称。然后,您可以执行以下操作:


就这么简单。

我喜欢你的方式,我尝试生成WSDL文件。我将wsdl.exe与参数/u和/p一起使用,得到了wsdl文件。但我有一个问题,就是用这种方法生成的方法包含了所有需要的内容,但没有登录密码。wsdl.exe是否有一个参数,用于使用这些参数生成wsdl?我向问题添加了代码。我发现我必须向我的服务实例添加类似的凭据:
CredentialCache cache=new-CredentialCache();添加(新的Uri(hotelService.Url),“基本”,新的网络凭证(“登录”,“密码”);hotelService.Credentials=缓存感谢您的帮助我喜欢您的方式,我尝试生成WSDL文件。我将wsdl.exe与参数/u和/p一起使用,得到了wsdl文件。但我有一个问题,就是用这种方法生成的方法包含了所有需要的内容,但没有登录密码。wsdl.exe是否有一个参数,用于使用这些参数生成wsdl?我向问题添加了代码。我发现我必须向我的服务实例添加类似的凭据:
CredentialCache cache=new-CredentialCache();添加(新的Uri(hotelService.Url),“基本”,新的网络凭证(“登录”,“密码”);hotelService.Credentials=缓存感谢您的帮助我尝试了此操作,但遇到错误401 Unauthorized(即使我设置了正确的登录名和密码)。我尝试了此操作,但遇到错误401 Unauthorized(即使我设置了正确的登录名和密码)。
[System.Web.Services.Protocols.SoapRpcMethodAttribute("http://api.xxx.com/v1/hotel/get", RequestNamespace="http://api.xxx.com/v1/hotel/", ResponseNamespace="http://api.xxx.com/v1/hotel/", Use=System.Web.Services.Description.SoapBindingUse.Literal)]
[return: System.Xml.Serialization.XmlElementAttribute("hotel")]
public hotelType get(int hotId) {
    object[] results = this.Invoke("get", new object[] {
                hotId});
    return ((hotelType)(results[0]));
}
public HotelService() {
    this.Url = "http://api.xxx.com/v1/hotel/";
}
string request = xmlrequest;
SOAPclient client = new SOAPclient();
string response = client.methodName(request);