Fer*_*Fer 3 wcf wsdl xml-namespaces
我在C#中开发了一个WCF服务.我们的客户已经拥有一个用Java编写的客户端软件.他们说,当他们试图添加我们的wcf服务referance时,他们会收到错误.他们认为关于命名空间的问题.
我不太了解WCF中的命名空间或任何其他标记详细信息.
他们说wcf服务的wsdl输出必须如下所示:
<xsd:import id="base" namespace="http://helios.theircompanyName.com/im schemaLocation="http://wwwdev1.theirCompanyName.com:8000/HeliosIM/im?xsd=1"/>
Run Code Online (Sandbox Code Playgroud)
但我们的服务给出:
<xsd:import schemaLocation="http://myComputerName/MyWcfProjectFolder/MyWcfService.svc?xsd=xsd0" namespace="http://tempuri.org/"/>
Run Code Online (Sandbox Code Playgroud)
可以看出,我的服务没有属性id="base"和namespace,schemaLocation属性是不同的.
如何更改WCF以生成他们想要的wsdl xml?
如果要从tempuri.org(默认为WCF)更改服务的命名空间,则需要在4个位置更改它:
例如:
// 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" />
Run Code Online (Sandbox Code Playgroud)
但是,我真的不明白为什么他们告诉你这是必要的.作为服务的提供者,取决于您提供的是什么命名空间,取决于您.无论这个值设置为什么,他们都可能会遇到消耗wsdl的相同问题.
schemaLocation也是如此,同样,这个位置指向的不是它们.当您在xml架构中进行导入时,Schemalocation实际上是完全可选的,因此如果它们依赖于某些值,那么它们就不符合xsd.
我猜他们在使用你的WSDL时遇到了困难而且不太明白什么是错的,所以选择责备你的服务.通过basicHttpBinding公开的服务元数据是整个WCF堆栈中最具互操作性的,并且应该100%来自java.
他们如何建立自己的客户?您的服务是否在他们可以看到的地方运行?