2010-07-06 31 views
0

我想寫一個應用程序的高層次的設計文檔,它將公開它的網絡服務爲各種客戶端。爲此,我需要提供我們將來在服務器端開發的Web服務的WSDL。我之前使用過Web服務,但從來沒有深入研究過WSDL的細節。幫助:合同第一Webservices

我搜索了很多,發現我需要使用XML和XSD來生成WSDL。那麼,我還沒有設計,我認爲這將是我的第一步。

現在我擔心的是,使用原始XML非常困難,而且我不熟悉WSDL術語。

任何人都可以建議什麼是高級別的步驟,應該執行創建一個簡單的WSDL與它的一些錯誤信息?

任何洞察將有所幫助。

謝謝你們。

+0

爲什麼你想創建自己的WSDL?我試圖在這裏獲得動力,所以我可以在回答時指出你正確的方向。自動生成的WSDL有什麼問題? – CkH 2010-07-07 13:57:24

+0

@Cameron,以及這是我第一次創建WSDL。我想遵循合同的第一種方法。應用程序設計將在初始階段進行更改和更新。而我們的消息元素,操作也可能會改變。所以我認爲先創建WSDL而不使用任何編碼是正確的。我對嗎? 感謝您的回覆,歡呼! – Aakash 2010-07-10 05:46:32

+0

查看我的答案,我們將從那裏開始工作。 – CkH 2010-07-10 16:43:00

回答

0

使用WCF爲您創建WSDL可能更容易。您只需要定義您的OperationContracts和DataContracts。您不必執行操作,只需定義界面中的內容即可。

0

其實如果你是第一次開發合同,你應該首先生成你的「消息」。

在傳統的Web服務中,您實際上會爲您的請求和響應啓動XSD。然後從XSD生成代碼以確保您的數據類型符合SOAP。幸運的是,DataContractSerializer已經變得非常聰明,並且會爲您處理您的數據類型。

考慮到這一點,您應該首先生成服務合同和請求/響應消息(數據合同)。當您在WCF中公開一個mex端點時,將爲您生成WSDL。創建自己的WSDL可能非常複雜,而且實際上你應該嘗試的唯一原因是如果你真的想隱藏某些消費者的功能。即使你想由於這個原因生成你自己的WSDL,如果你願意的話,讓WCF創建它仍然會更容易,然後在你認爲合適的時候改變它。

讓我們在這裏停下來,看看你是否還有其他問題。

0

我對契約優先的Web服務的動機是允許服務和客戶端由不同的開發人員並行編寫。使用WSDL和「添加服務引用」,您必須在編寫客戶端之前發佈服務。

作爲替代方案,不要通過WSDL。您可以編寫一個由客戶端和服務共享的.NET接口。在Adventures in Software

public interface IServiceClientFactory<TServiceInterface> 
{ 
    void CallService(Action<TServiceInterface> action); 
    TResult CallService<TResult>(Func<TServiceInterface, TResult> function); 
} 

public class ServiceClientFactory<TServiceInterface> : 
    IServiceClientFactory<TServiceInterface> 
    where TServiceInterface : class 
{ 
    class Client : System.ServiceModel.ClientBase<TServiceInterface> 
    { 
     public TServiceInterface Service 
     { 
      get { return base.Channel; } 
     } 
    } 

    public void CallService(Action<TServiceInterface> action) 
    { 
     Client client = new Client(); 

     try 
     { 
      action(client.Service); 
      client.Close(); 
     } 
     catch (Exception) 
     { 
      client.Abort(); 
      throw; 
     } 
    } 

    public TResult CallService<TResult>(Func<TServiceInterface, TResult> function) 
    { 
     Client client = new Client(); 

     try 
     { 
      TResult result = function(client.Service); 
      client.Close(); 
      return result; 
     } 
     catch (Exception) 
     { 
      client.Abort(); 
      throw; 
     } 
    } 
} 

更多細節:本課程將直接從界面生成WCF代理。