C# WCF服务和客户端返回无效的响应类型
我已经阅读了网络上关于这个确切错误的所有相关问题: 内容类型text/html;响应消息的charset=UTF-8与绑定的内容类型不匹配(text/xml;charset=UTF-8) 但是,我仍然无法确定错误的实际原因是什么。它随机发生在负载平衡器后面的4台web服务器上。出现错误时,我会在地址栏中手动键入负载平衡器名称所在的Web服务器名称之一。不会从该特定实例的某个web服务器检索数据,但如果我尝试使用其他服务器,我会将数据取回 我们不能期望我们的用户手动将负载平衡器的url更改为4个服务器名称中的一个来尝试获得成功 从我读到的内容来看,客户端和服务器之间似乎存在配置错误。如果是这样的话,这不是一直都在发生吗?从我的日志消息来看,错误显然发生在MVC控制器方法的客户端 我把我的代码贴在下面,希望有人能回答这个问题。我会非常感激的 服务器配置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/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) {