2011-08-04 130 views
1

我有一個問題,當我連接到使用WCF測試客戶端我得到的消息端點404錯誤託管WCF服務

無法從http://localhost:8080/evals/basic

我獲得元數據米添加終點和起點使用

private ServiceHost _serviceHost; 

    public ServiceHost ServiceHost 
    { 
     get { return _serviceHost?? (_serviceHost= new ServiceHost(typeof(EvalService))); } 
    } 

    public void Start() 
    { 
     ServiceHost.AddServiceEndpoint(typeof(IEvalService), 
           new BasicHttpBinding(), 
           "http://localhost:8080/evals/basic"); 
     ServiceHost.AddServiceEndpoint(typeof(IEvalService), 
           new WSHttpBinding(), 
           "http://localhost:8080/evals/ws"); 
     ServiceHost.AddServiceEndpoint(typeof(IEvalService), 
           new NetTcpBinding(), 
           "net.tcp://localhost:1002/evals"); 
     ServiceHost.Open(); 
    } 

在代碼主機,當我檢查狀態使用這種方法

private void ShowServiceInfo() 
    { 
     var message = String.Format("{0} is {1} with these endpoints:\n", _host.ServiceHost.Description.ServiceType, _host.ServiceHost.State); 
     foreach (var serviceEndpoint in _host.ServiceHost.Description.Endpoints) 
     { 
      message += "\n" + serviceEndpoint.Address; 
     } 
     MessageBox.Show(message); 
    } 

然後我得到這個消息看起來好像一切運行正常

HostService.EvalService開設有這些端點:

http://localhost:8080/evals/basic 的http://本地主機:8080/evals/WS 的net.tcp: // localhost:1002/evals

任何人都知道爲什麼瀏覽到端點將無法工作?

+0

權限?嘗試作爲管理員運行你的應用程序?我注意到應用程序不能互相溝通,除非允許端點(忘記如何)或者以管理員身份運行應用程序。也許在單個應用程序中是一樣的。 –

+0

只是因爲我沒有UAC打開而啓用UAC時纔會這樣。另外當我嘗試通過App.config配置端點時,我得到此異常 --------------------------- System.InvalidOperationException:Service 'HostService.EvalService'具有零應用程序(非基礎設施)端點。這可能是因爲沒有爲您的應用程序找到配置文件,或者因爲在配置文件中找不到匹配服務名稱的服務元素,或者因爲服務元素中沒有定義端點。 –

+0

如果我將啓動項目設置爲我的WCF項目,那麼我在WCF服務主機中得到此異常 System.InvalidOperationException:ServiceMetadataBehavior的HttpGetEnabled屬性設置爲true,並且HttpGetUrl屬性是相對地址,但沒有http基地址。提供http基地址或將HttpGetUrl設置爲絕對地址。 –

回答

2

我看到兩個問題 - 但無法覈實這些(你沒有提供必要的配置文件):

1)你似乎沒有任何MEX端點 - 端點交換有關的元數據服務。那些需要明確地添加到你的服務主機 - 你可以擁有MEX終端的HTTP或Net.Tcp協議

2)我無法驗證你是否已經啓用服務元數據作爲你的服務的服務行爲 - 通常這是從配置(你沒有提供)完成的,或者你也可以在代碼中添加這個行爲 - 但它必須明確添加。

ServiceMetadataBehavior metadataBehavior; 
metadataBehavior = ServiceHost.Description.Behaviors.Find<ServiceMetadataBehavior>(); 

if(metadataBehavior == null) 
{ 
    metadataBehavior = new ServiceMetadataBehavior(); 
    metadataBehavior.HttpGetEnabled = true; 
    ServiceHost.Description.Behaviors.Add(metadataBehavior); 
} 

不到位任何MEX基礎設施,沒有客戶端可以查詢您的服務,爲方法和參數 - 這就是爲什麼WCF測試客戶端將無法正常工作。添加服務元數據行爲和至少一個MEX端點,你應該沒問題。

+0

好吧,我認爲這是正確的方向,那麼每個服務都需要有一個mex端點? –

+0

@Nitro52:如果你想要「可發現性」 - 是的,這需要MEX,因此MEX服務行爲和MEX端點。這樣的服務在沒有MEX的情況下可以正常工作 - 但是你不能「發現」並且要求它採用其方法等。 –

+0

我有mex終端添加,仍然不工作..檢查我的帖子與所有相關的代碼在這裏... http://stackoverflow.com/questions/7192877/selfhosted-wcf-service-cant-be-tested-via -wcftestclient – user20358