7

ODataサービスをセットアップするのは初めてですが、もちろん問題があります...

問題は、サービスを実行できないことです。「リクエストエラー」が発生し続けます。 リクエストエラー

問題が何であるかを調査しましたが、一般的な問題は、アクセスルールが正しく入力されていないことです。だから私はこれを単数形と複数形の両方で修正しようとしましたそして私もtypeof(Post).getType().Name

これが私のコードです。あなたが私を助けてくれることを願っています、私は何時間も立ち往生しています。

public class ODataService : DataService<Entity>
{
    // This method is called only once to initialize service-wide policies.
    public static void InitializeService( DataServiceConfiguration config )
    {
        //config.SetEntitySetAccessRule( "Users", EntitySetRights.All );
        //config.SetEntitySetAccessRule( "Posts", EntitySetRights.All );
        //config.SetEntitySetAccessRule( "Albums", EntitySetRights.All );


        config.SetEntitySetAccessRule( "*", EntitySetRights.AllRead );
        config.SetServiceOperationAccessRule( "*", ServiceOperationRights.AllRead );
        //config.SetServiceOperationAccessRule( "GetPosts", ServiceOperationRights.AllRead );

        config.UseVerboseErrors = true;
        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
    }

    [WebGet]
    public IQueryable<Post> GetPosts()
    {
        return CurrentDataSource.Posts.AsQueryable();
    }
}

私のEntityFrameworkクラスの構造(dbが最初) 私のEntityFrameworkクラスの構造(dbが最初)

エンティティクラスのメソッドとメンバー。ここでは、エンティティは複数形で綴られています。 エンティティクラスのメソッドとメンバー

これは私のWeb.configです。

<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <connectionStrings>
    <add name="Entity" connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider connection string=&quot;data source=XXX;Initial Catalog=XXX;persist security info=True;user id=XXX;password=XXX;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
    <add key="ValidationSettings:UnobtrusiveValidationMode" value="WebForms" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime requestValidationMode="4.5" targetFramework="4.5" encoderType="System.Web.Security.AntiXss.AntiXssEncoder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    <pages controlRenderingCompatibilityVersion="4.5" />
    <machineKey compatibilityMode="Framework45" />
  </system.web>
<system.serviceModel>
    <services>
      <service name="LinkIT.Core.OData.ODataService"  behaviorConfiguration ="DebugEnabled">
      </service>
    </services>
    <behaviors>
      <serviceBehaviors >
        <behavior name="DebugEnabled">
          <serviceDebug includeExceptionDetailInFaults="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
  </system.serviceModel>
</configuration>

詳細なエラーメッセージ:

サーバーでリクエストの処理中にエラーが発生しました。例外メッセージは次のとおりです。'値をnullにすることはできません。パラメータ名:propertyResourceType'。詳細については、サーバーログを参照してください。例外スタックトレースは次のとおりです。

System.Data.Services.WebUtil.CheckArgumentNull [T](T value、String parameterName)at System.Data.Services.Providers.ResourceProperty..ctor(String name、ResourcePropertyKind kind、ResourceType propertyResourceType)atSystem.Data.Services。 System.Data.Services.Providers.BaseServiceProvider.PopulateMetadata ()at System.Data.Services.Providers.BaseServiceProvider.LoadMetadata()at System 2 knownTypes, PrimitiveResourceTypeMap primitiveResourceTypeMap) at System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMetadata(IDictionary. System.Data.Services.DataServiceの2 childTypes, IDictionary.Data.Services.DataService1.CreateProvider 1.CreateMetadataAndQueryProviders(IDataServiceMetadataProvider& metadataProviderInstance, IDataServiceQueryProvider& queryProviderInstance, BaseServiceProvider& builtInProvider, Object& dataSourceInstance) at System.Data.Services.DataService()1.HandleRequest() at System.Data.Services.DataService1.ProcessRequestForMessage(Stream messageBody)at SyncInvokeProcessRequestForMessage(Object、Object []、Object [])at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance、Object [] input、Object []&outputs)atSystem.ServiceModel。 Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc&rpc)at System.ServiceModel.Dispatcher.Immut )System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc&rpc)atSystem。ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc&rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc&rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&rpc)atSystem.ServiceModel.Dispatcher。ブールisOperationContextSet)

4

1 に答える 1

10

WCFデータサービスチームは確認します-これは、列挙型(まだサポートされていません)を使用するときに直面する正確なエラーです。

列挙型を削除します(または、推奨される回避策を使用して、列挙型プロパティのラッパーを使用します)。これはなくなるはずです。

于 2012-09-03T03:40:39.887 に答える