dojo.xhrGet 无法调用 WCF GET 方法返回具有 WCF 支持的 DbContext 对象

dojo.xhrGet not being able to call WCF GET method returning DbContext object with WCF support

所以这是交易:

我有一个以这种方式定义的方法的操作契约:

[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]

aspnet_Users GetUsers();

当我在 WCF 测试客户端中测试该方法时,我得到的结果很好,但是当我发送 dojo GET 请求时,我收到错误

504: "[Fiddler] ReadResponse() failed: The server did not return a complete response for this request. Server returned 0 bytes. "

以前类似问题的解决方案都没有帮助解决这个问题。这是 dojo 调用和网络配置:

var request = dojo.xhrGet({
    url: 'http://localhost/Authentication/Service1.svc/GetUsers',
    handleAs: "json",
    contentType: "application/json",
    headers: {
        "Content-Type": "application/json; charset=UTF-8",
        "Access-Control-Allow-Origin": "*"
    },
    load: doSomething,
    error: OnError
});

 <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="MyAppServiceAspNetAjaxBehavior">
          <enableWebScript />
        </behavior>
        <behavior name="web">
          <enableWebScript />
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
        <behavior name="ServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer maxItemsInObjectGraph="2147483646" />
          <bufferedReceive maxPendingMessagesPerChannel="2147483646" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <webHttpBinding>
        <binding name="ServiceBinding" maxReceivedMessageSize="214748364777777" maxBufferSize="2147483647" maxBufferPoolSize="214748364777777" transferMode="Streamed">
          <readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxStringContentLength="2147483647" />
        </binding>
      </webHttpBinding>
    </bindings>
    <services>
      <service name="WcfAuthenticationService.Service1" behaviorConfiguration="ServiceBehavior">
        <endpoint address="" binding="webHttpBinding" contract="WcfAuthenticationService.IService1" behaviorConfiguration="web" bindingConfiguration="ServiceBinding"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <directoryBrowse enabled="true" />
  </system.webServer>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="Entities" connectionString="data source=serv;initial catalog=aspnetdb;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
<add name="aspnetdbEntities" connectionString="metadata=res://*/DataModelFirst.UsersModel.csdl|res://*/DataModelFirst.UsersModel.ssdl|res://*/DataModelFirst.UsersModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=serv;initial catalog=aspnetdb;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

方法 returns 支持 WCF 的 DbContext 实体。

我有另一种方法 returns 好的结果与 dojo post 方法调用,所以我猜这与 DbContext... 我非常感谢任何帮助。

错误是“'aspnet_Users' 无法序列化为 JSON,因为它的 IsReference 设置是 'True'。JSON 格式不支持引用,因为没有标准化用于表示引用的格式。要启用序列化,请禁用类型或类型的适当父 class 上的 IsReference 设置。“