1

我将 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>

任何帮助是极大的赞赏。谢谢,泰勒

4

0 回答 0