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="data source=serv;initial catalog=aspnetdb;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
方法 returns 支持 WCF 的 DbContext 实体。
我有另一种方法 returns 好的结果与 dojo
post 方法调用,所以我猜这与 DbContext
... 我非常感谢任何帮助。
错误是“'aspnet_Users' 无法序列化为 JSON,因为它的 IsReference 设置是 'True'。JSON 格式不支持引用,因为没有标准化用于表示引用的格式。要启用序列化,请禁用类型或类型的适当父 class 上的 IsReference 设置。“
所以这是交易:
我有一个以这种方式定义的方法的操作契约:
[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="data source=serv;initial catalog=aspnetdb;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
方法 returns 支持 WCF 的 DbContext 实体。
我有另一种方法 returns 好的结果与 dojo
post 方法调用,所以我猜这与 DbContext
... 我非常感谢任何帮助。
错误是“'aspnet_Users' 无法序列化为 JSON,因为它的 IsReference 设置是 'True'。JSON 格式不支持引用,因为没有标准化用于表示引用的格式。要启用序列化,请禁用类型或类型的适当父 class 上的 IsReference 设置。“