2011-02-24 70 views
3

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

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

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

例如

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

http://stackoverflow.com/questions/2397519/programmatically-add-an-attribute-to-a-method-or-parameter-任何帮助?稍后分配?从我读的内容来看,'GetCustomAttributes'返回应用属性的一个克隆,所以你不能修改它。 – 2011-02-24 18:09:32

+2

为什么你需要改变命名空间?它只是一个命名容器。 – 2011-02-24 18:09:57

+0

在MSDN上也发现了这个:http://social.msdn.microsoft.com/forums/en-US/wcf/thread/5573326a-21b3-4d21-b05c-8e00b1674137/ – 2011-02-24 18:11:05

回答

5

您可能会混淆XML名称空间和URL。下面是一个不是URL的命名空间示例:urn:schemas-microsoft-com:datatypes

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

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


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

+0

是的,我认为很明显,我很困惑:)我认为命名空间足够了解。我想我遇到的麻烦是确切地知道在WCF Web服务代码中设置的东西。我一直在尝试,并且我知道我正在更改错误的值,因为在更改值后,我最终得到与未找到的Web服务文件相关的错误。 – campbelt 2011-02-25 20:36:47

+1

尝试'[ServiceContract(Namespace =“http://services.mydepartment.mycompany.com/myservice/”)]' – 2011-02-25 20:41:18

+0

谢谢。为了澄清,我在原始帖子中添加了一个编辑,描述了我正在尝试更改的对“http://tempuri.org”的引用。我可能本来应该把它放在第一位,但当时我没有想到。 – campbelt 2011-02-25 20:49:19