2011-02-24 68 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