2012-06-14 92 views
0

我完全不瞭解這個WCF服務的事情,所以任何指導方針將不勝感激。關於WCF服務的困惑

我收到一個大型項目,其代碼用於檢查某個設備的網絡狀態。我的老闆告訴我要搜索TCPSocket的創建並更改套接字上的某些選項。

檢查網絡狀態的函數是ReqDDCNetworkStatus。當然,我搜索的代碼的來源,並在我的服務引用發現這個界面:

public interface LGeDDC 
{ 
    [System.ServiceModel] 
    [System.ServiceModel.XmlSerializerFormatAttribute()] 
    [return: System.ServiceModel.MessageParameterAttribute(Name="result")] 
    string ReqDDCNetworkStatus(out string status); 
} 

此文件被稱爲References.cs,我以爲它是從一個WSDL(SOAP)文件運行svcutil.exe的產生用於在程序和相關設備之間進行通信。

這與實際功能的類,它被調用:

namespace XrayEngines.DDCService 
{ 
    public partial class LGeDDCClient : System.ServiceModel.ClientBase<LGeDDC>, LGeDDC 
    { 
     public LGeDDCClient(string endpointConfigurationName, string remoteAddress) : 
       base(endpointConfigurationName, remoteAddress) 
     { 
     } 

     public string ReqDDCNetworkStatus(out string status) 
     { 
      return base.Channel.ReqDDCNetworkStatus(out status); 
     } 
    } 
} 

因此函數會以下列方式被稱爲:

try 
{ 
    for (int i = 0; i < p.Length; i++) 
    { 
     v = ddc.ReqDDCNetworkStatus(out r); 
     writeMessage("v:" + v + " , r:" + r); 
    } 
} 
catch (Exception e) 
{ 
    writeMessage("Network Exception Occurred: ."+e.ToString()); 
} 

而且我迷路了。我從字面上看不到任何在客戶端和服務器之間建立連接的任何事情,但該程序起作用。如果有人能夠以這種方式提供關於如何建立連接的解釋,我會非常感激。

回答

2

神奇的是在以下兩行:

public partial class LGeDDCClient : System.ServiceModel.ClientBase<LGeDDC> 

return base.Channel.ReqDDCNetworkStatus(out status); 

代理類從ClientBase繼承,實現了實際的消息的發送(執行遠程呼叫)的一類。

+0

我真的很感激確切和迅速的迴應。我明白,WCF中的服務是在客戶端和服務器之間發送數據的更高級別的抽象,以便您不必混淆套接字。但是有可能研究服務實際傳輸消息的詳細過程嗎? – l46kok

+0

也只是出於好奇,ClientBase使用什麼協議來傳輸消息? – l46kok

+2

它取決於'> .config文件中配置的內容坐下並深呼吸後,請參閱:http://msdn.microsoft.com/en-us/library/ms731734.aspx –

1

基類System.ServiceModel.ClientBase執行所有連接。您只設置服務的URL和一些更多參數,通常使用配置文件完成。檢查配置文件的服務端點,參數..