WCF中更改名称空间和schemaLocation属性

问题描述 投票:3回答:1

我用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属性是不同的。如何更改WCF以生成他们想要的wsdl xml?

wcf wsdl xml-namespaces
1个回答
7
投票

如果要从tempuri.org(这是WCF的默认值)中更改服务的名称空间,则需要在4个地方进行更改:

  1. 服务合同
  2. 数据合约
  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模式中进行导入时,模式定位实际上是完全可选的,因此,如果它们依赖于其中的某些值,则它们不符合xsd要求。

我想他们在使用您的WSDL时遇到了困难,并且不太了解问题所在,因此选择将责任归咎于您的服务。在basicHttpBinding上公开的服务元数据是整个WCF堆栈中最可互操作的,并且应该100%可从Java消耗。

他们如何建立自己的客户?您的服务在他们可以看到的地方运行吗?

© www.soinside.com 2019 - 2024. All rights reserved.