Я пытаюсь передать закодированную base64 строку через WCF, используя WebHttpBinding.
Я получаю загадочную ошибку "Bad Request 400", что сервер не отвечает. Я знаю, что это связано с размером строки, потому что, если я тестирую очень короткую строку (около 4 КБ или около того), она работает, но все, что чуть выше, не работает.
Я везде читал, что это связано с maxReceivedMessageSize или другой конфигурацией в web.config для привязки, но даже после изменения этих цифр как на клиенте, так и на сервере я все равно получаю сообщение об ошибке (другими словами, я прочитал много других сообщений об этой точной проблеме, но они, кажется, не помогли?)
Я подтвердил, что все работает правильно, до последней строки следующего кода, в котором выдается ошибка:
static IHttpDataPush push = new HttpDataPush();
var wcfClient = ChannelHelperExtensions.WebHttpChannel<IHttpDataRcv>("http://localhost:3941/HttpRcv");
var args = wcfClient.OptionArgs();
foreach (var v in args)
{
HttpTransactionDataArgs uid = push.Option(v.Entity, v.Option, v.Key);
wcfClient.ResponseNotification(uid); <-- error thrown at this line
Это мои контракты на обслуживание / данные контракты:
[ServiceContract]
public interface IHttpDataPush
{
[OperationContract]
HttpTransactionDataArgs DbRequest(HttpTransactionOptionArgs args);
[OperationContract]
[WebGet]
HttpTransactionDataArgs DbOption(string entity, string option, string key);
}
[DataContract]
[KnownType(typeof(HttpTransactionDataArgs))]
public class HttpTransactionDataArgs
{
[DataMember]
public string EntityName { get; set; }
[DataMember]
public string Base64Schema { get; set; }
[DataMember]
public string Base64Data { get; set; }
[DataMember]
public bool TransactionSuccessful { get; set; }
}
Контракты для принимающей стороны передачи данных:
[ServiceContract]
public interface IHttpDataRcv
{
[OperationContract]
HttpTransactionOptionArgs[] OptionArgs();
[OperationContract]
bool ResponseNotification(HttpTransactionDataArgs args);
}
[DataContract]
[KnownType(typeof(HttpTransactionOptionArgs))]
public class HttpTransactionOptionArgs
{
[DataMember]
public string Entity { get; set; }
[DataMember]
public string Option { get; set; }
[DataMember]
public string Key { get; set; }
}
Серверная часть web.config:
<bindings>
<webHttpBinding>
<binding name="webHttpConfig" closeTimeout="00:20:00" openTimeout="00:20:00"
receiveTimeout="00:20:00" sendTimeout="00:20:00"
maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" >
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>
<endpoint address="/HttpRcv" behaviorConfiguration="REST" bindingConfiguration="webHttpConfig" binding="webHttpBinding" contract="EmailContracts.IHttpDataRvc" />
Клиентский веб-конфиг (где выдается ошибка:)
<client>
<endpoint address="http://localhost:3941/HttpRcv"
binding="webHttpBinding"
bindingConfiguration="webHttpConfig"
contract="EmailContracts.IHttpDataRcv" />
</client>
<bindings>
<webHttpBinding>
<binding name="webHttpConfig" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647">
<readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxDepth="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>
</webHttpBinding>
</bindings>