C# WCF服务和客户端返回无效的响应类型

C# WCF服务和客户端返回无效的响应类型,c#,asp.net-mvc,json,wcf,wcf-binding,C#,Asp.net Mvc,Json,Wcf,Wcf Binding,我已经阅读了网络上关于这个确切错误的所有相关问题: 内容类型text/html;响应消息的charset=UTF-8与绑定的内容类型不匹配(text/xml;charset=UTF-8) 但是,我仍然无法确定错误的实际原因是什么。它随机发生在负载平衡器后面的4台web服务器上。出现错误时,我会在地址栏中手动键入负载平衡器名称所在的Web服务器名称之一。不会从该特定实例的某个web服务器检索数据,但如果我尝试使用其他服务器,我会将数据取回 我们不能期望我们的用户手动将负载平衡器的url更改为4个服

我已经阅读了网络上关于这个确切错误的所有相关问题:

内容类型text/html;响应消息的charset=UTF-8与绑定的内容类型不匹配(text/xml;charset=UTF-8)

但是,我仍然无法确定错误的实际原因是什么。它随机发生在负载平衡器后面的4台web服务器上。出现错误时,我会在地址栏中手动键入负载平衡器名称所在的Web服务器名称之一。不会从该特定实例的某个web服务器检索数据,但如果我尝试使用其他服务器,我会将数据取回

我们不能期望我们的用户手动将负载平衡器的url更改为4个服务器名称中的一个来尝试获得成功

从我读到的内容来看,客户端和服务器之间似乎存在配置错误。如果是这样的话,这不是一直都在发生吗?从我的日志消息来看,错误显然发生在MVC控制器方法的客户端

我把我的代码贴在下面,希望有人能回答这个问题。我会非常感激的

服务器配置
这可能是您在客户端而不是服务器上看到的错误。错误消息指出,它在预期
text/xml
时收到了
text/html
。当服务托管在IIS中时,通常会出现这种情况,服务器出现一些问题,导致它使用ASP.NET错误页(将是HTML)而不是SOAP响应(将是XML)进行响应。错误的间歇性以及您正在使用负载平衡器的事实向我表明,负载平衡器后面的一台服务器有问题


你能单独联系到服务器吗?尝试浏览每个服务器的.svc页面和/或在soapui之类的工具中调用web服务,您应该会看到HTML错误页面。或者,尝试在Windows事件日志中查找每台服务器上的ASP.NET错误,您可能会发现其中一个已记录的旧错误。

我可以单独访问服务器。我可以浏览到每个服务器的svc页面。它是如此断断续续地发生,我无法让它出错。谢谢你的意见。我会联系我们的管理员,提出你的建议。。。
<system.serviceModel>
    <services>
      <service name="FuelTktImgRetrievalSvc.FuelTktImgRetrieval" behaviorConfiguration="ServiceBehavior">
        <endpoint address="" binding="basicHttpBinding" contract="FuelTktImgRetrievalSvc.IFuelTktImgRetrieval" bindingConfiguration="BasicHttpBinding_IFuelTktImgRetrieval">
          <identity>
            <dns value="localhost" />
          </identity>
      </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <!--<add baseAddress="\\miavdeteoabweb\applications\FuelTktImgRetrievalSvc" />-->
          </baseAddresses>
        </host>
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IFuelTktImgRetrieval" closeTimeout="00:10:00"
      openTimeout="00:10:00" receiveTimeout="04:00:00"
      sendTimeout="04:00:00" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" />
      </basicHttpBinding>
    </bindings>
    <diagnostics wmiProviderEnabled="false" performanceCounters="All">
      <messageLogging logMessagesAtTransportLevel="true" logMessagesAtServiceLevel="true" logMalformedMessages="true" logEntireMessage="true" maxSizeOfMessageToLog="2147483647" maxMessagesToLog="500" />
    </diagnostics>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
      <add binding="basicHttpsBinding" scheme="http" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IFuelTktImgRetrieval" />
      </basicHttpBinding>
    </bindings>
    <diagnostics wmiProviderEnabled="true">
      <messageLogging logMessagesAtTransportLevel="true" logMessagesAtServiceLevel="true" logMalformedMessages="true" logEntireMessage="true" maxSizeOfMessageToLog="2147483647" maxMessagesToLog="500" />
    </diagnostics>
    <client>
      <endpoint address="http://ride/FuelTktImgRetrievalSvc/FuelTktImgRetrieval.svc"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IFuelTktImgRetrieval"
        contract="FuelTktImgRetrievalSvc.IFuelTktImgRetrieval" name="BasicHttpBinding_IFuelTktImgRetrieval" />
    </client>
    <behaviors>
      <endpointBehaviors>
        <behavior name="webhttp">
          <webHttp />
        </behavior>
        <behavior name="BasicHttpBinding_IFuelTktImgRetrieval">
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
public async Task<List<HH_FuelTkt_Output>> GetFilteredFuelTicketsAsync(HH_FuelTkt_Input value)
        {

            using (HandheldEntities DbContext = new HandheldEntities())
            {
                using (var dbcxtTrans = DbContext.Database.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted))
                {
                    try
                    {
                        // code left out for brevity
                        List<HH_FuelTkt_Output> tkts_Combined = await tkts.ToListAsync();

                        dbcxtTrans.Commit();

                        return tkts_Combined;
                    }
[HttpPost]
public async Task<JsonResult> GetFilteredFuelTicketsAsync(HH_FuelTkt_Input id)
{
    try
    {
        IEnumerable<HH_FuelTkt_Output> fto = await db.GetFilteredFuelTicketsAsync(id);

        return Json(fto, JsonRequestBehavior.AllowGet);
    }
$.ajax({
                    url: '@Url.Action("GetFilteredFuelTicketsAsync", "Home")',
                    data: JSON.stringify(HH_FuelTkt_Input),
                    dataType: 'json',
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {