2

Web プロジェクトでホストされている WCF サービスでAjax Auto Complete Extenderを利用しようとしています。サービスに到達し、フィドラーで結果が返されることを確認しましたが、オート コンプリート エクステンダーに関連付けられたテキスト ボックスには値が入力されません。

サービス契約は次のとおりです。

[ScriptService]
[ServiceContract(Namespace = "")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public interface ICertificateService
{
    [System.Web.Services.WebMethod]
    [System.Web.Script.Services.ScriptMethod]
    [WebInvoke(Method = "POST",
        BodyStyle = WebMessageBodyStyle.Wrapped,
        ResponseFormat = WebMessageFormat.Json)]
    List<string> GetCompletionList(string prefixText, int count);
}

実装は、入力された文字列のリストを返すだけです。

aspx は次のとおりです。

<asp:TextBox runat="server" ID="aceInstructors"></asp:TextBox>
<ajaxToolkit:AutoCompleteExtender runat="server" 
                                  ID="autoCompleteInstructor"
                                  TargetControlID="aceInstructors"
                                  ServiceMethod="GetCompletionList" 
                                  ServicePath="../../CertificateService" 
                                  MinimumPrefixLength="1"
                                  CompletionInterval="1000" 
                                  EnableCaching="true" CompletionSetCount="5">
                        <Animations>
                            <OnShow>  <HideAction Visible="true" /> </OnShow>
                            <OnHide> <HideAction Visible="false" /> </OnHide>       
                        </Animations>

サービスのルートは、Global.asax で次のように構成されます。

private void RegisterRoutes()
    {
        RouteTable.Routes.Add(new ServiceRoute("CertificateService", new WebServiceHostFactory(), typeof(CertificateService)));
    }

前に述べたように、サービスをホットにすることができ、フィドラーで見ると JSON 形式で応答を受け取ります。以下は未加工の応答です。

HTTP/1.1 200 OK
Server: Cassini/4.0.1.7
Date: Mon, 12 Sep 2011 16:44:16 GMT
X-AspNet-Version: 4.0.30319
Content-Length: 68
Cache-Control: private
Content-Type: application/json; charset=utf-8
Connection: Close

{"GetCompletionListResult":["Alpha","Beta","Gamma","Delta","Omega"]}

サービス コントラクトから ResponseFormat を省略すると、結果が XML 形式で返され、テキスト ボックスに未定義の非常に長いリストが表示されることに注意してください。

基本的なものが欠けていますか?

4

1 に答える 1

2

この問題はここで対処されました。私が解決する必要があった問題は、JSON がラップされて返される方法を中心に展開しているように見えました。ajax ツール キットのオートコンプリート エクステンダーは、JSON コンテンツが「.d ラップ」されていることを期待しているようです。これは、提供されたリンクの構成設定に従うことで実現されました。

また、これらの web.config 設定を追加する Ajax 対応の WCF プロジェクト テンプレートがあることにも注意してください。おそらく時間を節約できるはずです。

于 2011-09-13T13:51:24.267 に答える