WCF:我是否需要用动态命名空间替换“http://tempuri.org/”?

时间:2011-02-24 17:54:54

标签: wcf dynamic namespaces

我有一个将部署到多个域的Web服务。我想摆脱WCF默认名称空间“http://tempuri.org/”,并将其替换为部署Web服务的域,例如“http://mydomain.com/”。我知道这里最好的解决方案就是让Web服务存在于一个地方,并使用那个域作为命名空间,但这对我来说不是一个选择。

我找到了这个问题here的部分答案。在这篇文章中,建议的答案是在配置文件中设置一个URL属性,但恐怕我不太明白答案。这个URL属性到底在哪里?此外,由于我无法控制的原因,将使用此Web服务的客户端应用程序没有app.config文件,因此该客户端应用程序中的所有配置都必须在代码中设置。我不确定这是否重要,但我想提一下,以防万一。

编辑:为了澄清,我试图删除的“http://tempuri.org”引用位于由svcutil.exe生成的.cs文件中。

e.g。

[System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IEmailService/SendEmail", ReplyAction = "http://tempuri.org/IEmailService/SendEmailResponse")]
void SendEmail(Services.Internal.CorrespondenceWebService.Email email);

1 个答案:

答案 0 :(得分:6)

您可能会将XML名称空间与URL混淆。以下是不是URL的命名空间示例:urn:schemas-microsoft-com:datatypes

由于命名空间不一定是URL,因此您不必为每个环境更改它。

另一方面,您应该选择一个名称空间,并一致地使用它。也许像http://services.mydepartment.mycompany.com/myservice/这样的东西。您真的不想发送仍使用http://tempuri.org/的服务,因为这表明对命名空间缺乏了解。


响应您更新的问题:这些命名空间存在于由svcutil.exe生成的.cs文件中,因为它们存在于服务的元数据中。您需要在服务中更改它们,并且在创建或更新客户端时,它将具有正确的命名空间。