【发布时间】:2011-01-18 23:04:32
【问题描述】:
试图从 wsdl 文件中删除“tempuri”引用。我已经遵循了我能想到的所有现有建议。添加一个
[ServiceBehavior(Namespace="mynamespace")]
实现类的属性,添加一个
[ServiceContract(Namespace="mynamespace")]
到合约接口并更改 web.config 中端点的“bindingNamespace”属性以匹配。然而,当加载(在 IIS 中)时,绑定命名空间永远不会改变......它总是 tempuri。
是否有人对解决此问题有任何其他想法?下面是来自网络配置的示例...绑定命名空间永远不会,无论我做什么,都不会更新为 mynamespace,它始终是 tempuri.org。如果在通过主机工厂加载端点后,我遍历主机描述中的绑定并更新它们,它们会发生变化,但这似乎是一种 hack。
对于位于“http://mydomain.com/MyService.svc”的服务,以下代表我的端点配置,这甚至被 IIS 使用吗?
<services>
<service name="ServiceImplementationClassReference,MyAssembly" >
<endpoint name=""
address="MyService.svc"
binding="basicHttpBinding"
bindingNamespace="mynamespace"
bindingConfiguration=""
contract="IMyContract" />
<endpoint name="mexHttpBinding"
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
仍然引用 tempuri.org 的生成 WSDL 文件的相关片段
<wsdl:import namespace="http://tempuri.org/" location="http://mydomain.org/MyService.svc?wsdl=wsdl0" />
........
<wsdl:service name="Directory">
<wsdl:port name="BasicHttpBinding_IDirectoryServices"
binding="i0:BasicHttpBinding_IDirectoryServices">
<soap:address location="http://mydomain.org/MyService.svc" />
</wsdl:port>
</wsdl:service>
在 wsdl:definition 节点中,xml 命名空间 i0(由上面列出的服务引用)也设置为 tempuri.org,因此需要 import 语句。如果我使用 BasicHttpBinding 或 wsHttpBinding,则 temprui 的使用没有变化。事实上,在 web.config 文件中设置绑定到 wsHttpBinding 仍然会导致上面的输出,引用 BasicHttpBinding_IdirectoryServices。
谢谢!
【问题讨论】:
-
Ladislav,是的,这是 .NET 4.0;我已经添加了 wsdl 文件的相关部分,希望这会有所帮助。整件事要乱七八糟才能正确发布。我非常乐意将完整的东西发送给任何可能觉得有用的人。谢谢!!感谢您的帮助。