gpt4 book ai didi

wcf - 在 WCF 中更改命名空间和 schemaLocation 属性

转载 作者:行者123 更新时间:2023-12-01 09:59:10 24 4
gpt4 key购买 nike

我用 C# 开发了一个 WCF 服务。我们的客户已经拥有一个用 Java 编写的客户端软件。他们说当他们尝试添加我们的 wcf 服务引用时,他们得到一个错误。他们认为关于命名空间的问题。
我不太了解 WCF 中的命名空间或任何其他标记细节。
他们说 wcf 服务的 wsdl 输出必须如下所示:

<xsd:import id="base" namespace="http://helios.theircompanyName.com/im schemaLocation="http://wwwdev1.theirCompanyName.com:8000/HeliosIM/im?xsd=1"/>

但我们的服务提供:

<xsd:import schemaLocation="http://myComputerName/MyWcfProjectFolder/MyWcfService.svc?xsd=xsd0" namespace="http://tempuri.org/"/>

可以看出,我的服务没有id="base"namespace这样的属性,schemaLocation属性不同。< br/>如何更改 WCF 以生成他们想要的 wsdl xml?

最佳答案

如果您想从 tempuri.org(这是 WCF 默认设置)更改服务的命名空间,您需要在 4 个地方进行更改:

  1. 服务契约(Contract)
  2. 数据契约(Contract)
  3. 服务实现
  4. 端点配置元素中的BindingNamespace

例如:

// Service Contract
[ServiceContract(Namespace="http://myNamespace")]
public interface IMyService
{}

// Data Contract
[DataContract(Namespace="http://myNamespace")]
public class MyType
{}

// Service implementation
[ServiceBehavior(Namespace="http://myNamespace")]
public class Service : IMyService
{}

<!-- In config -->
<endpoint address="http://whatever"
bindingNamespace="http://myNamespace"
binding="basicHttpBinding"
contract="Something.IMyService" />

但是,我真的不明白他们为什么告诉你这是必要的。作为服务的提供者,您提供什么命名空间取决于您,而不是他们。无论此值设置为什么,它们在使用 wsdl 时都可能会遇到相同的问题。

schemaLocation 也是如此,同样,此位置指向的位置并不取决于他们。当您在 xml 模式中进行导入时,Schemalocation 实际上是完全可选的,因此如果它们依赖于其中的某些值,那么它们不符合 xsd。

我猜他们在使用您的 WSDL 时遇到了困难,并且不太明白哪里出了问题,因此选择了责怪您的服务。在 basicHttpBinding 上公开的服务元数据是整个 WCF 堆栈中最具互操作性的,并且应该 100% 可以从 java.util 中使用。

他们是如何尝试建立客户的?您的服务是否在他们可以看到的地方运行?

关于wcf - 在 WCF 中更改命名空间和 schemaLocation 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19050696/

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