2009-06-01 51 views
2

我想爲我的客戶創建一個Web服務,以便他們可以在自己的網站上顯示他們的數據。由於我不知道每個客戶端在運行什麼平臺,因此創建WCF服務的代理可以被所有瀏覽器使用的最佳解決方案是什麼?另外,我不確定我應該如何呈現數據。假設我的用戶沒有任何開發技能。我將通過其他一些界面讓用戶能夠下載創建請求所需的代碼,然後處理響應。在客戶端解析xml響應,然後創建數據列表還是讓列表已經格式化(以字符串形式)並讓客戶端執行document.write?會更好嗎?我已經看了幾個解決方案,但他們似乎需要使用帶有腳本管理器的ASP頁面。就像我說過的,我想要一些足夠通用的東西來使用不同的瀏覽器。主要是IE和FireFox。使用JavaScript消費WCF,但保持通用的所有客戶端?

丹尼爾

回答

4

首先,因爲你不希望依賴於微軟的Ajax的ScriptManager,不要在endpointBehaviors /行爲使用< enableWebScript/>。它是特定於Microsoft的JSON。

然而幸運的是,WCF讓您的客戶端很容易決定他們是否需要XML或泛型JSON。

  1. 使用< webHttp/>行爲。

    <endpointBehaviors>
    <行爲名稱= 「My.WcfServices.webHttpBehavior」 >
    < webHttp/>
    < /行爲>
    </endpointBehaviors >

  2. 按照 Damian Mehers' blog, WCF REST Services中所述創建自定義WebServiceHost和自定義屬性屬性。在Mehers的代碼中,類型由請求內容類型決定。您可能想要擴展它以檢查URL,例如.xml或.json或?format = xml | json。

  3. SerializeReply方法中,檢查URL。

    消息請求= OperationContext.Current.RequestContext.RequestMessage;
    Uri url = request.Properties [「OriginalHttpRequestUri」]作爲Uri;
    //檢查格式查詢字符串
    System.Collections.Specialized.NameValueCollection colQuery = System.Web.HttpUtility.ParseQueryString(url.Query);
    string strResponseFormat = colQuery [「format」];
    //或檢查擴展
    string strResponseFormat = url.LocalPath.Contains(「。json」)?「json」:「xml」;

  4. 定義您的方法(或多個)

    [OperationContract的]
    [WebGet(UriTemplate = 「你好。{responseFormat}」)] //或 「喂?格式= {responseFormat}」
    [ DynamicResponseType]
    public string Hello(string responseFormat)
    {
    return「Hello World」;
    }

實施例的URL:
http://localhost/myrest.svc/Hello.xml
http://localhost/myrest.svc/Hello.json

http://localhost/myrest.svc/Hello?format=xml
http://localhost/myrest.svc/Hello?format=json

  • 兩個JSON和XML很容易跨瀏覽器消耗。庫,如JSON for JSON和Sarissa for XML使它更加容易。
  • 注:如果您看到錯誤「無法找到與綁定的WebHttpBinding端點符合計劃http的基址。」中,添加baseAddressPrefixFilters元素,並添加本地主機(或任何你域)以IIS主機標題名稱。

    <system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"> 
        <baseAddressPrefixFilters> 
         <add prefix="http://localhost"/> 
        </baseAddressPrefixFilters> 
    </serviceHostingEnvironment> 
    
    +0

    現在,那只是岩石!這是我在這個話題上看到的最好的帖子! – DDiVita 2009-06-01 15:22:36