0

ASP.Net Web フォームに RadGrid があります。今、私は AjaxEnabledWCFService を介してクライアント側でこれをバインドしたいと考えています。すべての実装が完了すると、データは応答を介して取得されているように見えますが、グリッドに表示されるのではなく、「メソッドは許可されていません」などのメッセージが表示されます。

このエラーの背後にある実際の理由を見つけることができませんでした.datが入力されていない原因は何ですか.

これが私の実装の詳細です:-私は以下のようにスクリプトマネージャーに特定のサービスを追加しました:-

<telerik:RadScriptManager ID="RadScriptManager1" runat="server">
         <Services>
                <asp:ServiceReference Path="~/services/CustomerListService.svc" />
         </Services>
        <Scripts>
            <%--Needed for JavaScript IntelliSense in VS2010--%>
            <%--For VS2008 replace RadScriptManager with ScriptManager--%>
            <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" />
            <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js" />
            <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryInclude.js" />
        </Scripts>
    </telerik:RadScriptManager>

次に、以下のように RadGrid ClientEvents - DataBindings タグにサービスを追加しました:-

 <DataBinding SelectMethod="GetCustomers" Location="~/services/CustomerListService.svc" 
                     SortParameterType="Linq" FilterParameterType="Linq">
                </DataBinding> 

以下のコードのように、注文としてDataContract、GetCustomers()としてServiceContractを持つorderListServiceという名前のサービスがあります:-

元:

[ServiceContract(Namespace = "")] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class CustomerListService {

[OperationContract]
public List<Customer> GetCustomers()
{
    CustomerData CustData = new CustomerData();
    System.Data.DataTable dt = CustData.GetCustomersList(1, 1, "");

    List<Customer> Customerist = new List<Customer>();//Here Customer is DataContract
    foreach (System.Data.DataRow dr in dt.Rows)
    {
        Customer cust = new Customer();
        SetPropertiesFromOrderRow(cust, dr);//set all the property values from DataRow to Order
        CustomerList.Add(cust);
    }

    return CustomerList;
}

}

構成ファイルの設定は次のようになります:-

   <endpointBehaviors>
    <behavior name="ClientSideBindingTest.services.CustomerListServiceAspNetAjaxBehavior">
     <enableWebScript />
    </behavior>
   </endpointBehaviors>

  <services>
   <service name="ClientSideBindingTest.services.CustomerListService">
    <endpoint address="" behaviorConfiguration="ClientSideBindingTest.services.CustomerListServiceAspNetAjaxBehavior"
     binding="webHttpBinding" contract="ClientSideBindingTest.services.CustomerListService" />
   </service>
  </services>

ここで提案がある場合はお知らせください。また、提供されたパラメーターに従って値を取得するためにパラメーターをサービスメソッドに渡す方法を知る必要があります。

前もって感謝します。

4

1 に答える 1

0

ここで私の質問の解決策を得ました。詳細は以下に説明されています:-

理由 : この「メソッドは許可されていません」の主な理由。web.configファイルで構成を設定してWCFのトレース機能を有効にした後、キャッチされる可能性があります。それがトレースしたものは、ここで説明しています:-

説明 : DB からこのフィールドに値を割り当てていたときに、DateTime タイプのフィールドがありました。NULL 値が割り当てられるのを回避するため、割り当てられていないフィールドにはデフォルト値の '01/01/0001 00:00:000' が自動的に割り当てられます。分野に配属されました。しかし、このフィールドがjSonに渡されているとき、この日付はjson Dateフィールドの範囲外であり、ここで実際のエラーが発生し、その例外がスローされ、そこでサービスが中断されます。

解決策: 解決策は簡単です。フィールドに範囲外のデフォルト値を割り当てるのではなく、NULL を受け取るように DateTime フィールドを Nullable にする必要があり、これで問題が解決しました。正確なエラーを追跡するのに役立った WCF トレース機能に感謝します。

于 2013-01-18T07:19:25.483 に答える