gpt4 book ai didi

c# - 现有连接被远程主机强行关闭 - WCF 数据服务错误

转载 作者:太空狗 更新时间:2023-10-29 20:47:35 25 4
gpt4 key购买 nike

我目前正在将 WCF 数据服务(好吧,ADO.Net 数据服务)与 Entity Framework 一起使用,并且在执行 POST 时出现以下错误(省略/更改了一些不相关的信息):

<?xml version="1.0" encoding="utf-8"?><m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"><m:code /><m:message xml:lang="en-GB">The URI 'http://localhost:56568/MyWcfDataServices.svc/EntitySetName(pk_id)' is not valid for POST operation. For POST operations, the URI must refer to a service operation or an entity set.</m:message></m:error>

上网查了下,似乎找不到关于这条消息的太多信息,所以调试起来有点困难。这很可能发生,因为我发布的其中一个属性是一个大的 base64 字符串(如果我不发布它就可以正常工作)。我已尝试将 maxRequestLength 设置为以下值:

<httpRuntime maxRequestLength="102400" />

但是好像没什么用。虽然我会继续解决这个问题,但我想我会在这里快速发帖,看看是否有人知道可能有帮助的事情。

我的 WCF 数据服务类如下所示:

public class MyWcfDataServices: DataService<ContextName>
{
public static void InitializeService(DataServiceConfiguration config)
{
// set entity access rules etc
}
}

谢谢

编辑:我似乎对此毫无进展。到目前为止,这是我尝试过的方法。

在服务器端我设置了以下绑定(bind):

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
minFreeMemoryPercentageToActivateService="0" />
<services>
<service name="MyWcfDataServices"
behaviorConfiguration="myBehaviorConfig">
<endpoint address=""
binding="webHttpBinding"
bindingConfiguration=""
contract="System.Data.Services.IRequestHandler" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="myBehaviorConfig">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>

希望 maxItemsInObjectGraph 属性是解决方案。这些绑定(bind)看起来正确吗?我是否缺少一些可以让我向服务器发布更多数据的属性?我是否也需要在客户端上配置此服务行为?

最佳答案

好的,这就是我为解决问题所做的工作。首先,我通过将以下内容添加到我的 web.config 来在服务器上启用跟踪:

<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\Traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>

这为我提供了有关问题的更多信息,特别是在我的情况下,最大请求长度仍然是 65536,这表明我的绑定(bind)没有被提取。这归结为两件事,首先是我的 service 配置的 name 部分不正确 - 它需要包含命名空间信息。我最终得到了这个(我也不得不把它放在客户端的 web.config 中):

<services>
<service name="Solution.Project.MyWcfDataServices">
<endpoint address=""
binding="webHttpBinding"
bindingConfiguration="webHttpConfig"
contract="System.Data.Services.IRequestHandler" />
</service>
</services>
<bindings>
<webHttpBinding>
<binding name="webHttpConfig"
allowCookies="true"
maxReceivedMessageSize="20000000"
maxBufferSize="20000000"
maxBufferPoolSize="20000000">
<readerQuotas maxDepth="32"
maxArrayLength="200000000"
maxStringContentLength="200000000" />
</binding>
</webHttpBinding>
</bindings>

最后,我不得不将 .svc 文件标记中的工厂从模板生成的 System.Data.Services 程序集更改为 Microsoft 的 ODATA 程序集(也包含 System.Data.Services 命名空间) System.Data.Services.DataServiceHostFactory,Microsoft.Data.Services,Version=5.2.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35

我现在的头发比刚开始时少了,但我想这就是你付出的代价。

关于c# - 现有连接被远程主机强行关闭 - WCF 数据服务错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14436181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com