powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Изучение WCF. Удаленный сервер вернул неожиданный ответ:(400) Bad Request
6 сообщений из 6, страница 1 из 1
Изучение WCF. Удаленный сервер вернул неожиданный ответ:(400) Bad Request
    #38513798
INFINITs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, мастера, помогите разобраться с ошибкой.
Решил изучить данную технологию.

Пытаюсь отправить файлик как бы на сервер. При отправки файла размером до 48кб все происходит успешно, при отправки большего размера появляется данная ошибка
"Удаленный сервер вернул неожиданный ответ:(400) Bad Request"

Пробывал
transferMode="Buffered"
и
transferMode="Streamed"

Подкажите в какую сторону смотреть

Конфиг хоста
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel"
              switchValue="Error, ActivityTracing"
              propagateActivity="true">
        <listeners>
          <add name="traceListener"
               type="System.Diagnostics.XmlWriterTraceListener" 
               initializeData= "D:\Traces.svclog" />          
        </listeners>
      </source>  
    </sources>
  </system.diagnostics>
  <system.web>
    
    <compilation debug="true" />
    <httpRuntime maxRequestLength="2147483647"
                 executionTimeout="01:00:00"/>
  </system.web>
  <system.serviceModel>
    <diagnostics>
      <messageLogging
        logEntireMessage="true"
        logMalformedMessages="true"
        logMessagesAtServiceLevel="false"
        logMessagesAtTransportLevel="true"
        maxMessagesToLog="2147483647"
        maxSizeOfMessageToLog="2147483647" />
    </diagnostics>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IServiceTransportModule"
                 closeTimeout="00:01:00"
                 openTimeout="01:00:00"
                 receiveTimeout="01:00:00"
                 sendTimeout="01:00:00"
                 maxBufferSize="2147483647"
                 maxBufferPoolSize="2147483647"
                 maxReceivedMessageSize= "2147483647"
                 messageEncoding="Mtom"
                 transferMode="Buffered">
          <readerQuotas
                maxDepth="2147483647"
                maxStringContentLength="2147483647"
                maxArrayLength="2147483647"
                maxBytesPerRead="2147483647"
                maxNameTableCharCount="2147483647" />
          <security mode="None">
            <transport clientCredentialType="None"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service name="TransportModuleService">
        <endpoint address=""
                  binding="basicHttpBinding"
                  bindingConfiguration="BasicHttpBinding_IServiceTransportModule"
                  contract="TransportModuleService.IServiceTransportModule"
                  name="BasicHttpBinding_IServiceTransportModule">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/" />
          </baseAddresses>
        </host>
      </service>
    </services>    
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="True" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>
</configuration>



сам сервис

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
namespace TransportModuleService
{   [ServiceContract]
    public interface IServiceTransportModule
    {  [OperationContract]
        void getFileStreamFromCL(FileFromCl p_file);
        [OperationContract]
        void getFileByteFromCL(string p_filename, Int32 p_length, Byte[] p_data);    
    }

[MessageContract]
public class FileFromCl
{
    [MessageHeader]
    public string FileName;
    [MessageHeader]
    public int FileLength;
    [MessageBodyMember]
    public Stream FileContent;
}


namespace TransportModuleService
{        public class TModuleServ : IServiceTransportModule
    {public void getFileStreamFromCL(FileFromCl p_file)
        {   Console.WriteLine(p_file.FileName);
            string dir_in = @"D:\";
            var file_in = File.Create(dir_in + p_file.FileName);            
            for (var j = 0; j < p_file.FileLength; j++)                       
           { file_in.WriteByte((Byte)p_file.FileContent.ReadByte()); }
           Console.WriteLine("EXECUTE");
            file_in.Close();
        }
        public void getFileByteFromCL(string p_filename, Int32 p_length, Byte[] p_data)
        {
            string dir_in = @"D:\";
            Console.WriteLine(p_filename);
            var file_in = File.Create(dir_in + p_filename);
            file_in.Write(p_data, 0, p_length);
            file_in.Close();
        }
    }
}




Конфиг клиента
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IServiceTransportModule" 
                         closeTimeout="00:01:00"
                         openTimeout="00:01:00" 
                         receiveTimeout="00:10:00" 
                         sendTimeout="00:01:00"
                         allowCookies="false" 
                         bypassProxyOnLocal="false" 
                         hostNameComparisonMode="StrongWildcard"
                         maxBufferSize="2147483647"                             
                         maxBufferPoolSize="2147483647" 
                         maxReceivedMessageSize="2147483647"                                                  
                         transferMode="Buffered"
                         useDefaultWebProxy="true">
                    <readerQuotas 
                         maxDepth="2147483647"                              
                         maxStringContentLength="2147483647" 
                         maxArrayLength="2147483647"
                         maxBytesPerRead="2147483647" 
                         maxNameTableCharCount="2147483647" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <behaviors>
           <endpointBehaviors>
              <behavior>
                 <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
              </behavior>
           </endpointBehaviors>
           <serviceBehaviors>
              <behavior>
                 <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
                 <serviceMetadata httpGetEnabled="true" />
                 <serviceDebug includeExceptionDetailInFaults="true" />
              </behavior>
           </serviceBehaviors>
        </behaviors>
        <client>          
            <endpoint address="http://localhost:8080/" 
                      binding="basicHttpBinding"
                      bindingConfiguration="BasicHttpBinding_IServiceTransportModule"
                      contract="TransportModuleService.IServiceTransportModule"
                      name="BasicHttpBinding_IServiceTransportModule" />
        </client>
    </system.serviceModel>
</configuration>




Код процедурок клиента

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
namespace TransportModuleClient
{
    public partial class Form1 : Form
    {
        string dir_out = @"D:\OUTBOX_DIR\";
        string dir_in =  @"D:\\INBOX_DIR\";
        ServiceTransportModuleClient svc = new ServiceTransportModuleClient();

        private void button2_Click(object sender, EventArgs e)
        {            
            DirectoryInfo dir = new DirectoryInfo(dir_in);            
            foreach (FileInfo files in dir.GetFiles())
            { LV_File.Items.Add(files.Name);
              FileFromCl MyFile = new FileFromCl();            
              MyFile.FileName = files.Name;
              MyFile.FileLength =(int)File_out.Length;            
              MyFile.FileContent = File_out;
              svc.getFileStreamFromCL(MyFile.FileLength, MyFile.FileName, MyFile.FileContent); 
         };

       private void button3_Click(object sender, EventArgs e)
        {  DirectoryInfo dir = new DirectoryInfo(dir_in);            
            foreach (FileInfo files in dir.GetFiles())
            { LV_File.Items.Add(files.Name);
               Byte[] File_out = File.ReadAllBytes(@dir_in + files.Name);                        
              svc.getFileByteFromCL(files.Name, File_out.Length, File_out);                                             
            };
}
}
...
Рейтинг: 0 / 0
Изучение WCF. Удаленный сервер вернул неожиданный ответ:(400) Bad Request
    #38513854
INFINITs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так же есть такая штука:

авторИ еще, на что обратил внимание. После обновления ссылки на сервис, в папке Service Reference\<папка с именем сервиса> создается файл configuration91.svcinfo, в котором значение MaxReceivedMessageSize равно 65536:


Код: xml
1.
2.
<property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
          <serializedValue>65536</serializedValue>



http://www.sql.ru/forum/662394/vopros-po-wcf-servisam?hl=bad request

Пожалуйста, тыкнуть носом в косяк.
...
Рейтинг: 0 / 0
Изучение WCF. Удаленный сервер вернул неожиданный ответ:(400) Bad Request
    #38513884
INFINITs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лог
...
Рейтинг: 0 / 0
Изучение WCF. Удаленный сервер вернул неожиданный ответ:(400) Bad Request
    #38520685
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
INFINITs,

проверь на файле, который забит каким нито одним символом из англ алфавита или цифрой.
...
Рейтинг: 0 / 0
Изучение WCF. Удаленный сервер вернул неожиданный ответ:(400) Bad Request
    #38521256
INFINITs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexeiK,
проверял, файлы с любым содержим до 49 кб отправлял свыше нет.
Поборол, косяк был в конфиге хоста невнимательно прочитал мануал.

В имя надо указывать класс ввидимо из-за этого не подтаскивались настройки
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<service name="TransportModuleService.TModuleServ">
        <endpoint address=""
                  binding="basicHttpBinding"
                  bindingConfiguration="BasicHttpBinding_IServiceTransportModule"
                  contract="TransportModuleService.IServiceTransportModule"
                  name="BasicHttpBinding_IServiceTransportModule">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>



Сейчас это работает, только появляется другая ошибка:

EndpointNotFoundException не обработано
Прослушивание на http://localhost:8080/ не выполняла ни одна конечная точка, оторая могла бы принять сообщение. Среди прочих причин это могло быть вызвано неправильным адресом или действием SOAP.

Причем появляется как-то рендомно, т.е. я нажимаю свою кнопку, все файл передался, нажимаю второй раз, вылетела ошибка.
Бывает что при первой передачи вылетает ошибка.
Если я правильно понимаю, какая-то проблема с соединением.
Вот только куда смотреть опять понятие не имею
...
Рейтинг: 0 / 0
Изучение WCF. Удаленный сервер вернул неожиданный ответ:(400) Bad Request
    #38521323
INFINITs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
INFINITsEndpointNotFoundException не обработано
Прослушивание на http://localhost:8080/ не выполняла ни одна конечная точка, оторая могла бы принять сообщение. Среди прочих причин это могло быть вызвано неправильным адресом или действием SOAP.


Небольшая поправка данная ошибка появляется если в конфиге хоста и клиента поставить
Код: xml
1.
2.
messageEncoding="Mtom"
transferMode="Stream"



если поставить
Код: xml
1.
2.
messageEncoding="Text"
transferMode="Buffered"


то все работает.


Теперь любопытно почему?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Изучение WCF. Удаленный сервер вернул неожиданный ответ:(400) Bad Request
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]