gpt4 book ai didi

.net - 在不使用 WSDL 的情况下通过 ChannelFactory 调用 SOAP 服务

转载 作者:行者123 更新时间:2023-12-05 01:26:56 25 4
gpt4 key购买 nike

我在不使用 WSDL 的情况下通过 ChannelFactory 调用 SOAP 服务。我将使用该服务的多个版本,并且我试图避免在我的项目/配置文件中使用多个版本的 WSDL。

代码如下:

[ServiceContract()]
public interface IServiceContract
{
[OperationContract(Name = "login")]
string login(string username);
}

public void UserLogin()
{
IServiceContract service = new ChannelFactory<IServiceContract>(
new BasicHttpBinding(),
"http://myurl.com/index.php/api/v2_soap/index/")
.CreateChannel();

var sessionId = service.login("username");
}

使用 Fiddler,我看到 SOAP 请求和响应正常返回。但是存在阻止响应消息反序列化的命名空间问题。

错误信息:反序列化操作“登录”的回复消息正文时出错。 OperationFormatter 遇到无效的消息正文。期望找到名称为“loginResponse”和命名空间为“http://tempuri.org/”的节点类型“Element”。找到名称为“ns1:loginResponse”且命名空间为“urn:Foo”的节点类型“Element”

如果我像这样更新我的 ServiceContract 以包含命名空间:

[ServiceContract(Namespace="urn:Foo")]
public interface IServiceContract
{
[OperationContract(Name = "login")]
string login(string username);
}

错误消息消失,但该方法现在返回 null 而不是实际值。我再次可以在 Fiddler 中看到 XML,我正在寻找的值在响应中,但它似乎仍然找不到元素 ns1:loginResponse。

问题是我如何配置 ChannelFactory 以知道所有具有给定命名空间的元素都将以 ns1: 为前缀?

最佳答案

关于.net - 在不使用 WSDL 的情况下通过 ChannelFactory 调用 SOAP 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6764027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com