2012-05-07 32 views
0

我在編程WCF服務方面很新,所以我希望如果你回答我的問題 - 你會考慮到這一點,並向我解釋,就像我是一個孩子(wcf服務的傻瓜: )。我有一個現有的WCF服務,我需要連接到。我應該做我自己的WCF服務,它將與現有的服務進行通信並共享一些已經在現有服務中定義的請求和響應對象。任何人都可以告訴我如何做到這一點(建立兩者之間的通信,並在服務中使用與現有服務相同類型的對象),一步一步?我試圖在網上找到答案,但它有點混亂(引用,使用合約......)。正如我所說,你可以自由地解釋,如果你想成爲一個真正的初學者。任何幫助都比歡迎...使用現有的WCF服務

+0

請,任何人...... –

回答

2

「我應該做我自己的WCF服務,它將與現有的服務進行通信並共享一些已經在現有服務中定義的請求和響應對象。」 - 這聽起來像你需要創建一個客戶端連接到服務(見下面如何創建客戶端)。您可以創建WCF服務與其他服務進行通信,但您需要的位數多於此格式允許的位置。

您可以通過WCF examples加速WCF。在示例中的WF_WCF_Samples \ WCF \ Basic下,您可以找到許多服務/客戶端設置,您應該先通過這些設置。 MSDN Magazine有大量關於此主題的文章。

在事物10,000英尺的看法:

客戶端 - 要消費服務創建一個測試控制檯應用程序。在項目中添加服務引用(當您右鍵單擊引用時,您將看到該選項)。將Service Reference對話框的地址指向您想要使用的服務,並且會發生很多事情。最後的結果是,你可以調用服務的方法對你的服務有類似下面

static void Main(string[] args) 
     { 
      var proxy = new ServiceReference1.Service1Client(); 
      var test = proxy.GetData(1); 
     } 

服務(其中服務1將什麼都服務於您呼叫代替) - 你只會創建方法和類型的接口,那麼裝飾這個接口的屬性,例如:

[ServiceContract] 
    public interface IService1 
    { 
     [OperationContract] 
     string GetData(int value); 

     [OperationContract] 
     CompositeType GetDataUsingDataContract(CompositeType composite); 

     // TODO: Add your service operations here 
    } 

這些是您的serive可以執行的操作(OperationContract)。服務方法可以返回原始類型或複雜類型(字符串與CompositeType)以及複雜或原始的參數。

你會實現這個合同:

public class Service1 : IService1 
    { 
     public string GetData(int value) 
     { 
      throw new ApplicationException("Boom"); 
      return string.Format("You entered: {0}", value); 

     } 

     public CompositeType GetDataUsingDataContract(CompositeType composite) 
     { 
      if (composite == null) 
      { 
       throw new ArgumentNullException("composite"); 
      } 
      if (composite.BoolValue) 
      { 
       composite.StringValue += "Suffix"; 
      } 
      return composite; 
     } 
    } 

接下來您需要託管服務。根據您的託管要求,您有很多選擇來完成此操作。你可以做的最簡單的託管是使用控制檯應用程序:

class Program 
    { 
     static void Main(string[] args) 
     { 
      var host = new ServiceHost(typeof(Service1), new Uri("http://localhost:8999/")); 

      host.AddServiceEndpoint(typeof(IService1), new BasicHttpBinding(), ""); 

      var metadataBehavior = host.Description.Behaviors.Find<ServiceMetadataBehavior>(); 
      if (metadataBehavior == null) 
      { 
       metadataBehavior = new ServiceMetadataBehavior(); 
       metadataBehavior.HttpGetEnabled = true; 
       host.Description.Behaviors.Add(metadataBehavior); 
      } 


      host.Open(); 

      Console.WriteLine("Running.."); 
      Console.ReadLine(); 
     } 
    }