我将 WCF 与 .Net 4.0 一起使用,所有默认设置为 basicHttpBinding,安全模式为 TransportWithMessageCredential over https。当我从发送特殊字符链接的客户端进行 Web 方法调用时-该方法成功但每个下一个方法调用都会给出 404 错误,没有更多信息,并且在跟踪日志中显示以下错误:
可用字节数与 HTTP Content-Length 标头不一致。可能存在网络错误或客户端可能正在发送无效请求。
因为我使用的是默认值,所以文本编码是 utf-8。我已经在 IIS7 和 IIS7.5 上进行了测试。同样的问题发生在我使用 IIS Express 的本地机器上。特殊字符进入服务器并成功写入数据库然后WCF只是一种错误是不寻常的。我必须重置 WCF 网站才能在服务器上重新开始工作。
这是失败的测试代码:
using (ToursServiceClient client = new ToursServiceClient())
{
client.ClientCredentials.UserName.UserName = "test";
client.ClientCredentials.UserName.Password = "test";
Tour tour = new Tour();
tour.Customer = new Customer();
tour.Customer.FirstName = "ñ";
InsertTourResult insertTourResult = client.InsertTour(tour);
Tour insertedTour = client.GetTourByTourID(insertTourResult.TourID);
}
此代码在调用时失败:
client.GetTourByTourID(insertTourResult.TourID);
如果我更改这行代码,则此代码成功:
tour.Customer.FirstName = "ñ";
至:
tour.Customer.FirstName = "a";
虽然我只使用默认绑定,但为了完整起见,我将在此处列出它们:
<binding name="BasicHttpBinding_ToursService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
任何帮助是极大的赞赏。谢谢,泰勒