2010-12-12 96 views
0

我一直在閱讀「學習WCF」一書,試圖讓我的頭腦創建和使用WCF Web服務。本書的第一部分通過創建並消費一個簡單的「Hello World」Web服務來引導讀者。客戶端使用WCF服務是否需要接口定義?

我遇到的問題是客戶端應用程序在調用它時似乎並不知道WCF接口的結構。如果可以使用任意數量的編程語言調用Web服務,這怎麼可能是必要的?

我在下面列出了相關的例子代碼...

下面是接口

[ServiceContract(Namespace="http: //www.thatindigogirl.com/samples/2006/06")] 
public interface IHelloIndigoService 
{ 
    [OperationContract] 
    string HelloIndigo(); 
} 

這裏的代碼爲承載網絡服務的服務代碼

static void Main(string[] args) 
{ 
    using (ServiceHost host = new ServiceHost(typeof(HelloIndigo.HelloIndigoService) , 
    new Uri("http: //localhost: 8000/HelloIndigo"))) 
    { 
    host. AddServiceEndpoint(typeof(HelloIndigo. IHelloIndigoService) , 
     new BasicHttpBinding(), "HelloIndigoService"); 
    host. Open(); 
    Console. WriteLine("Press <ENTER> to terminate the service host") ; 
    Console. ReadLine(); 
    } 
} 

這裏是客戶端的代碼ap p消耗WCF服務 這是我困惑的地方。由於此客戶端應用程序可以是任何能夠調用Web服務的語言,爲什麼有必要了解接口的定義?

using System. ServiceModel; 
[ServiceContract(Namespace = "http: //www.thatindigogirl.com/samples/2006/06")] 
public interface IHelloIndigoService 
{ 
    [OperationContract] 
    string HelloIndigo(); 
} 

static void Main(string[ ] args) 
{ 
EndpointAddress ep = new 
    EndpointAddress("http: //localhost: 8000/HelloIndigo/HelloIndigoService") ; 
IHelloIndigoService proxy = ChannelFactory<IHelloIndigoService>. 
    CreateChannel(new BasicHttpBinding(), ep); 

string s = proxy. HelloIndigo(); 
Console. WriteLine(s) ; 
Console. WriteLine("Press <ENTER> to terminate Client.") ; 
Console. ReadLine(); 
} 

我在這裏錯過了重要的一點嗎?也許我對消費網絡所需要的知識缺乏瞭解。我的目標是能夠使用WCF創建可以從任何編程語言或環境調用的.NET服務。

任何人都可以提出一個關於從.NET創建「跨平臺可使用」Web服務的好教程嗎?謝謝!

回答

2

此方法基於共享接口(本書不共享接口,而是使用本地副本),併成功應用於客戶端和服務器均使用.NET編寫的環境中。這種方法不適用於互操作性或SOA解決方案。

其他方法使用服務公開的元數據。元數據被定義爲WSDL文檔和幾個XSD文檔。這些元數據文件可以向.NET和非.NET開發人員提供關於您的服務的信息。本書包含元數據(mex)端點的定義,因此您一定會閱讀相關內容。

在.NET中使用元數據意味着創建服務代理。您可以使用Visual Studio的添加服務引用或命令行實用程序svcutil.exe自動執行此操作。無論如何,生成的代理代碼可能仍然包含從元數據創建的接口。它用於爲客戶端創建服務的透明抽象。

1

每WCF服務由

  • - 地址
  • - 結合
  • Ç - 合同

該合同是使用接口中聲明在服務器端。它聲明哪些方法可用於客戶端。如果您使用http綁定,則可以通過發出http請求(使用指向正確地址的任何庫或語言中的http客戶端(甚至是Web瀏覽器))來調用服務操作。所以客戶端根本不需要任何接口引用。它只需要遵循服務的ABC

Here是一個很好的WCF和Java互操作性博客。

1

要回答你對如何發展「跨平臺消耗品的Web服務,可以考慮REST方式的問題。使REST風格的Web服務真正使它們獨立於使用它們的平臺。簡而言之,他們使用已經很好建立的HTTP協議支持:GET和POST Http方法。

然後,您可以有一個Java應用程序只是讓POST而不必像製作SOAP封裝之類更復雜的東西搗鼓調用與有效負載自己的自定義XML內容的WCF服務。看看羅布巴格比的文章對REST:

http://www.robbagby.com/rest/rest-in-wcf-part-i-rest-overview/

2

「接口」並不意味着一個.NET接口文件,這意味着更多的通用編程接口 - 一組具有屬性的對象,並與參數的方法。這也被稱爲服務合同。

客戶端和服務需要共享(即雙方都知道)接口的原因很簡單,當您考慮它時 - 如果客戶端不知道接口,他們如何知道可用的操作以及預期的請求/響應對象應該是什麼樣子?

+0

+1感謝您的解釋! – webworm 2010-12-15 16:41:51

相關問題