簡體   English   中英

WCF客戶端/服務器模型

[英]WCF client/server model

我希望使用WCF作為可能的通信框架,使用客戶端/服務器模型創建功能豐富的應用程序。

我將在Windows服務中托管服務(因此使用WCF,我將使用netTcpBinding)。

現在,我想我可以將每個服務操作都定義為一個服務合同,但是可能會有很多操作,我寧願將它們划分為幾個內聚的服務合同。

將我的操作分成一組服務合同是否意味着我將不得不在單獨的端口上托管每個服務? (這不是理想的選擇,因為我希望在一個端口上運行它。)

有關此方案的任何設計技巧? 謝謝 :)

更新資料

很抱歉造成任何混亂-我不是打算將每個服務操作托管在不同的合同中,而只是將它們合理地分組。 我的問題源於一個事實,即我認為不可能在一個端口上托管多個ServiceHosts。

<巴掌額頭>

喬說,可以在一個端口上簡單地托管多個服務主機。 我想我最初嘗試此操作時一定會誤解了異常消息。 如果我可以解決這個問題,那么我認為這將是我最喜歡的解決方案。

我認為@Koystya和co在單個具體對象上實現每個接口並將其托管在單個ServiceHost中的方法也是解決我的問題的一個實用的解決方案。 特別是如果您將單個混凝土對象視為一種立面。 我可以想到的一個缺點是,您將無法根據合同擁有不同的ServiceBehaviors。

此外,我確實同意Joe的邏輯,即何時在一個具體的類上實現多個服務合同。

一個服務可以公開多個服務合同。

我將創建作為一個類實現的WCF服務,該類本身使用[ServiceContract]屬性實現多個接口。

我想我可以將每個服務操作都定義為一個服務合同,但是可能會有很多操作,我寧願將它們划分為幾個內聚的服務合同。

將操作分組為有凝聚力的服務合同是有意義的。 粒度(例如,每個服務合同的操作數)將取決於您的應用程序,但是每個操作一份服務合同似乎是極端的。

將我的操作分成一組服務合同意味着我將不得不在單獨的端口上托管每個服務

完全沒有,您可以在同一端口上擁有多個服務合同。

您可以有一個具體的類,該類可以實現Koistya Navin .NET建議的幾個服務合同。 但:

  • 這是內部實現細節。

  • 如果操作合同的實現緊密相關,以至於可以在一個類中實現它們,那么我只會考慮這樣做。

  • 在這種情況下,使它們成為同一服務合同的一部分可能是有意義的。

您為什么要考慮將每項操作納入自己的服務合同中? 您打算從中獲得什么?

基本上,服務合同可以根據需要包含任意多個標記為[OperationContract]的操作。 那可能更有意義。

如果您具有不同的功能,則始終可以定義一個以上ServiceContract(作為一個接口),並讓您的服務類全部實現它們,並將一個服務類(帶有所有ServiceContract接口)托管在一個地址(包括端口)上。

[ServiceContract]
public interface IMyService1
{
  [OperationContract]
  void SomeOperation1;

  [OperationContract]
  void SomeOperation2;
}

[ServiceContract]
public interface IMyService2
{
  [OperationContract]
  void SomeOperation21;

  [OperationContract]
  void SomeOperation22;
}

public class MyServiceClass : IMyService1, IMyService2
{
  void SomeOperation1;
  void SomeOperation2;
  void SomeOperation21;
  void SomeOperation22;
}

正如@Koistya所寫,這是可能的。 這是一個完整的示例: example

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM