我在服务器端有一个带有这个配置的 wcf 服务:
WSHttpBinding wshttp = new WSHttpBinding(SecurityMode.Message);
wshttp.ReceiveTimeout = new TimeSpan(0, 30, 0);
wshttp.MaxBufferPoolSize = 2147483647;
wshttp.MaxReceivedMessageSize = 2147483647;
wshttp.ReaderQuotas.MaxArrayLength = 2147483647;
wshttp.ReaderQuotas.MaxBytesPerRead = 2147483647;
wshttp.ReaderQuotas.MaxDepth = 2147483647;
wshttp.ReaderQuotas.MaxNameTableCharCount = 2147483647;
wshttp.ReaderQuotas.MaxStringContentLength = 2147483647;
wshttp.Security.Message.AlgorithmSuite =
System.ServiceModel.Security.SecurityAlgorithmSuite.Basic256Sha256Rsa15;
wshttp.Security.Message.ClientCredentialType = MessageCredentialType.UserName;
CustomBinding cb = new CustomBinding(wshttp);
var clockSkew = new TimeSpan(2, 0, 0);
SymmetricSecurityBindingElement security =
cb.Elements.Find<SymmetricSecurityBindingElement>();
security.LocalClientSettings.MaxClockSkew = clockSkew;
security.LocalServiceSettings.MaxClockSkew = clockSkew;
// Get the
// System.ServiceModel.Security.Tokens
// .SecureConversationSecurityTokenParameters
SecureConversationSecurityTokenParameters secureTokenParams =
(SecureConversationSecurityTokenParameters)
security.ProtectionTokenParameters;
// From the collection, get the bootstrap element.
SecurityBindingElement bootstrap =
secureTokenParams.BootstrapSecurityBindingElement;
// Set the MaxClockSkew on the bootstrap element.
bootstrap.LocalClientSettings.MaxClockSkew = clockSkew;
bootstrap.LocalServiceSettings.MaxClockSkew = clockSkew;
EndpointAddress ea =
new EndpointAddress(
new Uri("http://localhost:80/MyService"),
System.ServiceModel.EndpointIdentity.CreateDnsIdentity(
"MyService Certeficate"));
isarService.AddServiceEndpoint(
typeof(ServiceLayer.IService),
cb,
new Uri("http://localhost:80/MyService")).Address = ea;
isarService.Open();
一半的配置在应用程序文件中,如下所示:
<system.serviceModel>
<bindings />
<client />
<services>
<service behaviorConfiguration="ServiceBehavior" name="SL.Service">
<endpoint address="mex" binding="
mexHttpBinding"
bindingConfiguration=""
name="MexHttpEndPoint" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:80/MyService" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="true" />
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
<serviceThrottling maxConcurrentCalls="100"
maxConcurrentInstances="100" />
<serviceCredentials>
<clientCertificate>
<authentication customCertificateValidatorType=""
certificateValidationMode="ChainTrust" />
</clientCertificate>
<serviceCertificate findValue="MyService Certeficate"
storeLocation="CurrentUser"
storeName="Root" x509FindType="FindByIssuerName" />
<userNameAuthentication
userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="ServiceLayer.CUAPValidator,ServiceLayer" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
我记录了我的客户端错误,他们将日志文件发送给我,以修复我的许多客户的 app.application 工作,但其中一些有此错误:
System.ServiceModel.ProtocolException -> 从网络接收的 XML 存在问题。有关更多详细信息,请参阅内部异常。
System.Xml.XmlException -> 根级别的数据无效。第 1 行,位置 1。
我不知道 99 客户端什么时候可以很好地使用这个配置,为什么其中 3 个有这个问题!
问题 :
请帮助我用最简单的方法解决这个问题。
信息 :
我使用 Windows 服务托管我的服务。
编辑1:
我在客户端使用 svc 日志记录错误。然后我读到错误,错误就是这样。在服务器端,我在日志中看不到错误。我不知道有什么完全不同,但似乎不同的是互联网连接,我的意思是代理服务器或 vpn 等。
编辑2:
.net 版本会发生这种情况吗?因为第 4 版有一些更新。
编辑 3:
看到这个错误与其他可能的帮助相同
响应消息的内容类型 text/html 与绑定的内容类型不匹配 (application/soap+xml; charset=utf-8)。如果使用自定义编码器,请确保正确实现 IsContentTypeSupported 方法。响应的前 1024 个字节是:' Error Message A { FONT-WEIGHT: bold; 字体大小:10pt;颜色:#005a80;FONT-FAMILY: tahoma } A:hover { FONT-WEIGHT: 粗体; 字体大小:10pt;颜色:#0d3372;FONT-FAMILY: tahoma } TD { FONT-SIZE: 8pt; FONT-FAMILY: tahoma } TD.titleBorder { BORDER-RIGHT: #955319 1px solid; 边框顶部:#955319 1px 实心;填充左:8px;字重:粗体;字体大小:12pt;垂直对齐:中间;左边框:#955319 0px 实心;颜色:#955319;BORDER-BOTTOM:#955319 1px 实心;字体家族:tahoma;高度:35px;背景颜色:#d2b87a;文本对齐:左} TD。titleBorder_x { BORDER-RIGHT: #955319 0px solid; 边框顶部:#955319 1px 实心;填充左:8px;字重:粗体;字体大小:12pt;垂直对齐:中间;左边框:#955319 1px 实心;颜色:#978c79;BORDER-BOTTOM:#955319 1px 实心;字体家族:tahoma;高度:35px;后退'。
和内部错误:
远程服务器返回错误:(500) 内部服务器错误。