gpt4 book ai didi

c# - Visual Studio 生成的服务引用中的 XML 命名空间问题

转载 作者:太空宇宙 更新时间:2023-11-03 14:37:54 24 4
gpt4 key购买 nike

我正在连接到由第三方提供商托管的网络服务。我已经在我的项目中向 Web 服务添加了一个服务引用,VS 已经生成了所有需要的引用和类。

我正在连接这段代码(客户端名称和方法匿名):

 using (var client = new Client())
{
try
{
client.Open();
var response = client.Method(...);
return response.Status;
}
catch (SoapException ex)
{
throw CreateServiceException(ex);
}
finally
{
client.Close();
}
}

当到达 client.Open() 时,我收到一条异常消息:

The top XML element '_return' from namespace '' references distinct types System.Boolean and Service.Status. Use XML attributes to specify another XML name or namespace for the element or types.

在reference.cs中,我可以看到“_return”变量是用

修饰的
[System.ServiceModel.MessageBodyMemberAttribute(Namespace="", Order=0)]

wsdl、生成的服务引用或我的代码是否有问题?

更新:将服务生成为老式网络服务解决了这个问题。我已将 Sixto 的回答标记为暂时接受,但我仍然很好奇是什么导致了问题,以及服务生成器的任何参数是否可以解决原始问题。

最佳答案

如果您能够创建服务引用,则 WSDL 有效。异常消息是说你有 _return 的命名空间/类型歧义问题。生成的代码可能在某些上下文中将其用作 bool 值,而在另一种上下文中将其用作 Service.Status 类型。

在调用服务方法之前,我不会调用 ClientBase.Open 方法,因为我从未见过需要它。我总是根据需要调用 Close & Abort 方法。 Open 方法基本上只是将客户端的状态更改为不再可配置。我不确定这将如何触发生成的类中的代码,因为它是一个继承的方法。我会尝试删除该行,看看是否会出现相同的异常。否则,如果您还没有这样做,请在生成的代码中搜索所有使用 _return 的地方,看看您是否可以手动挑选出合适的类型。您可能需要为每个上下文使用不同的名称。

解决 WSDL 问题的另一种方法是创建 Web 引用(假设它是基于 HTTP 的服务)并查看生成代码是否按预期工作。如果确实有效,请使用 ASMX 客户端,除非您需要 WCF 代理功能。

关于c# - Visual Studio 生成的服务引用中的 XML 命名空间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/132131/

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