2011-05-18 101 views
0

我嘗試爲我的WCF服務創建代理。客戶端上的代理WCF嚮導

它創造了很酷。但只有小事讓我煩惱。

我想要它的事情有和IP地址作爲服務名稱。但真的有我的機器名稱。簡而言之

http://mycomputer/blabla各種現場發電

後,但我需要這樣的:http://93.48.56.74/blabla其中93.48.56.74是我的電腦的IP地址,我產生這個。

如何解決這個問題?

+0

在配置文件中搜索「mycomputer」,並用ip地址替換。 – faester 2011-05-18 07:20:26

+0

在服務器端還是客戶端? – alerya 2011-05-18 07:28:12

+0

我在配置文件中將我的機器名稱無處不在地改爲IP地址。但是在按下'Configure Service Reference ...'後,我遇到了同樣的問題。舒爾,每次更新後我都可以在全球進行更換。但它聞起來很難看。 – alerya 2011-05-18 07:31:29

回答

2

它使用機器名稱的原因是因爲這是在生成的WSDL中公佈的地址。正如評論,你可以修改你的Web.config或App.config,它將使用IP地址。

這麼簡單的答案:) 或者,您可以更改WSDL。如果您使用.NET 4.0 *,則可以將 <useRequestHeadersForMetadataAddress>行爲應用於您的服務配置。

添加行爲後,服務元數據將通告您用於檢索WSDL的同一端點地址。因此,如果您將服務參考添加到http://93.48.56.74/blabla,則生成的代理和配置應使用IP地址而不是主機名稱。

*:還有一個可用於.NET 3.5的修補程序:KB971842(不介意的修補程序的說明)

1

常規的方法是使用配置文件來配置你的客戶端,並指定服務器名稱或IP地址,因爲它符合您的需求。

但是從我能告訴你正在重新設計的服務調用定期重新配置/更新客戶端,在這種情況下,您的手動更改將被覆蓋。

在這種情況下,你有兩種方法:

  • 可以初始化客戶端,並設置參數(包括服務URL)編程。
  • 您可以選擇覆蓋hosts文件中的服務器名稱,以將其指向所需的IP地址。

最正確的方法是以編程方式進行初始化。具體取決於你的實現,但這裏是一個使用服務EchoService的例子。它可能會被簡化;我有複製並從測試初始化​​粘貼,我需要運行主機。

public void SetUp() 
    { 
     // the service address 
     var baseAddress = new Uri("http://127.0.0.1:3123/"); 

     host = new WebServiceHost(typeof(EchoService), baseAddress); 

     ServiceEndpoint sep = host.AddServiceEndpoint(typeof(IEchoService), new WebHttpBinding(), ""); 
     sep.Behaviors.Add(new WebHttpBehavior()); 

     echoFactory = new ChannelFactory<IEchoService>(new WebHttpBinding(), sep.Address); 
     echoFactory.Endpoint.Behaviors.Add(new WebHttpBehavior()); 

     client = echoFactory.CreateChannel(sep.Address, baseAddress); 
    } 
+0

很有意思 – alerya 2011-05-20 05:19:40