我有一个WCF服务,其方法接受一个数组(类型为Frame)。数组中的每个元素都包含一小部分元素(Shape类型),其中每个元素都有两个属性。所以,一切正常。但是现在我有一条从客户端到服务器的消息,它包含一个28帧的数组。有了Wireshark,我看到,消息传输正确。但在我的.NET WCF服务中,我没有接到电话。但为什么?绑定和读取器配额设置为5MB,这应该足够了。
绑定配置:
<bindings>
<webHttpBinding>
<binding name="default" transferMode="Streamed" maxReceivedMessageSize="5000000" maxBufferSize="5000000" maxBufferPoolSize="5000000">
<readerQuotas maxStringContentLength="5000000" maxArrayLength="5000000" />
</binding>
</webHttpBinding>
</bindings>
WCF服务定义:
[ServiceContract]
public interface IEditor
{
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/WriteFrames", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
void WriteFrames(Frame[] frames, int animationSpeed);
}
类型说明:
该服务作为单身人士托管。请参阅静态创建方法。
sealed class EditorHost : ServiceHost
{
public EditorHost()
: base(typeof(Editor))
{
}
public EditorHost(params Uri[] baseAddresses)
: base(typeof(Editor), baseAddresses)
{
}
public EditorHost(Editor singleton, params Uri[] baseAddresses)
: base(singleton, baseAddresses)
{
}
internal static EditorHost Create(out Editor editor, int port = 8732)
{
var uri = new Uri(string.Format("http://localhost:{0}/", port));
editor = new Editor();
var host = new EditorHost(editor, uri);
return host;
}
}
答案 0 :(得分:0)
我在this post中发现了问题。我的绑定配置是正确的,但它未正确应用于我的端点。使用端点上的属性bindingConfiguration工作。
我使用来自Colasoft的网络嗅探器发现问题,然后告诉我该软件包最后说的“太长了”。因此,JSON内容被破坏(中断)并且未正确反序列化。我只是想知道.NET没有抛出任何异常。
<webHttpBinding>
<binding name="webDefault" transferMode="Streamed" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" maxBufferPoolSize="2147483647">
<readerQuotas
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxDepth="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647"
/>
</binding>
</webHttpBinding>
<service name="WebService.EditorService.Editor" behaviorConfiguration="BehConfig">
<endpoint address="/JSON" binding="webHttpBinding" bindingConfiguration="webDefault" contract="WebService.EditorService.IEditor" behaviorConfiguration="web" />
</service>